• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マクロをボタンに登録するとちゃんと走らない)

マクロをボタンに登録するとちゃんと走らない

このQ&Aのポイント
  • エクセル2000で百人一首のマクロを作成しましたが、ボタンに登録すると上の句と下の句の更新が後回しになってしまいます。VBEを開いたまま実行すると上の句下の句を更新した後に解答用のinputboxが表示されます。解決方法はあるでしょうか?
  • また、マクロコードを2行にする場合と1行にする場合でエラーが発生することがあります。改行する場所に制限があるのでしょうか?教えてください。
  • 質問文章は、エクセル2000で百人一首のマクロを作成した際に、ボタンに登録すると上の句と下の句の更新が後回しになるという問題が発生しています。また、マクロコードを2行にする場合と1行にする場合でエラーが生じることがあります。改行する場所に制限があるのかどうか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

InputBox関数の前に画面更新をするように Application.ScreenUpdating = True を入れてみればどうなるでしょうか。

id-sakura
質問者

お礼

お礼が遅くなりました 早速Application.ScreenUpdating = True入れてみました ばっちりです。動くようになりました。目からうろこです(ToT)/ ありがとうございます。

その他の回答 (5)

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.6

>あとマクロコードを2行にするのが出きるときと出来ない時があるのは何故でしょう。 >同じように _ アンダーバーを入れて改行してるのですがエラーになります。 スペースとアンダーバー 改行が正解

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。 >マクロをボタンに登録すると上の句と下の句の更新が後回しになります >解答用のinputboxがちゃんと先に出てきます。 >何か解決方法はありますか? 私としては、たぶん、オートシェイプのTextBox が問題かなって思います。 確かに、Excel 2003 でも挙動がおかしいです。原因はテキストメモリとGメモリとは、直接、つながっていないからだと思います。 残念ながら、質問で出ているコードでは、途中からオブジェクトをIndex を使ってしまっているので、正しい名称は分からないものの、出来れば、コントロールツールのテキストボックスとかラベルとかにしたほうが、反応は良いかもしれません。 現状のマクロコードでは、最初に、テキストボックス(Index が確実に1~6あるとします)のテキストをクリアしたらどうでしょうか? For i = 1 To 6  mySh.Shapes(i).TextFrame.Characters.Text = "" Next i

id-sakura
質問者

お礼

お礼が遅くなり大変申し訳なく思っています 回答ありがとうございました もうすこし勉強します

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.4

整理してみました。 Sub test百人一首一番から二十番()   Dim hyakuSh As Worksheet   Dim mySh As Worksheet   Dim kaminoku As String   Dim simonoku As String   Dim myRow As Integer   Dim MyTBox As Integer   Dim smRow As Integer   Dim Ans As Integer   Dim i As Integer      Set mySh = Worksheets("百人一首クイズ")   Set hyakuSh = Worksheets("百人一首")   mySh.Activate      Randomize   myRow = Int((21 - 2 + 1) * Rnd + 2)   For i = 1 To 3     kaminoku = kaminoku & Chr(10) & hyakuSh.Cells(myRow, i + 2).Value     simonoku = simonoku & Chr(10) & hyakuSh.Cells(myRow, i + 5).Value   Next i   mySh.Shapes(1).TextFrame.Characters.Text = Replace(kaminoku, Chr(10), "", 1, 1)   For i = 1 To 5     Randomize     smRow = Int((51 - 2 + 1) * Rnd + 2)     mySh.Shapes(i + 1).TextFrame.Characters.Text = _       hyakuSh.Cells(smRow, 6).Value & Chr(10) & _       hyakuSh.Cells(smRow, 7).Value & Chr(10) & _       hyakuSh.Cells(smRow, 8).Value   Next i   Randomize   MyTBox = Int((6 - 2 + 1) * Rnd + 2)   mySh.Shapes(MyTBox).TextFrame.Characters.Text = Replace(simonoku, Chr(10), "", 1, 1)      Application.ScreenUpdating = True   On Error Resume Next   Ans = InputBox(Replace(kaminoku, Chr(10), "", 1, 1) & Chr(10) & Chr(10) & _     "下の句を番号で答えなさい", Title:="百人一首", Xpos:=7500, Ypos:=2500)   On Error GoTo 0   If Ans = 0 Or Ans < 2 Or Ans > 6 Then     MsgBox "2~6 の数字を入力してください。"   ElseIf Ans = MyTBox Then     MsgBox "正解!!! V(・ o ・)V"   Else     MsgBox ("間違いです!!!!!!!!" & Chr(10) & Chr(10) & _       Replace(simonoku, Chr(10), "", 1, 1) & Chr(10) & Chr(10) & "です")   End If   Set mySh = Nothing   Set hyakuSh = Nothing End Sub

id-sakura
質問者

お礼

このままボタンに登録してもちゃんと動作しました とりあえず作ってみて後で整理しようと思ってたのですが 一気に解決です。 お正月にちゃんと間に合いそうです ありがとうございます

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.3

Shapeの2~6は、下記のように、For~Nextできないでしょうか。 For i = 1 To 5   Randomize   smRow = Int((51 - 2 + 1) * Rnd + 2)   mySh.Shapes(i + 1).TextFrame.Characters.Text = _     hyakuSh.Cells(smRow, 6).Value & Chr(10) & _     hyakuSh.Cells(smRow, 7).Value & Chr(10) & _     hyakuSh.Cells(smRow, 8).Value Next i

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

>あとマクロコードを2行にするのが出きるときと出来ない時があるのは 何故でしょう。 >同じように _ アンダーバーを入れて改行してるのですがエラーになります。 具体例を上げていただけないでしょうか。

id-sakura
質問者

お礼

すみません 自分でもどこでなるのか把握しきれてないようです もうすこしマクロをこなして具体的にここと言える時に また質問させてください ありがとうございました

関連するQ&A