- ベストアンサー
マクロをボタンに登録するとちゃんと走らない
- エクセル2000で百人一首のマクロを作成しましたが、ボタンに登録すると上の句と下の句の更新が後回しになってしまいます。VBEを開いたまま実行すると上の句下の句を更新した後に解答用のinputboxが表示されます。解決方法はあるでしょうか?
- また、マクロコードを2行にする場合と1行にする場合でエラーが発生することがあります。改行する場所に制限があるのでしょうか?教えてください。
- 質問文章は、エクセル2000で百人一首のマクロを作成した際に、ボタンに登録すると上の句と下の句の更新が後回しになるという問題が発生しています。また、マクロコードを2行にする場合と1行にする場合でエラーが生じることがあります。改行する場所に制限があるのかどうか教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
InputBox関数の前に画面更新をするように Application.ScreenUpdating = True を入れてみればどうなるでしょうか。
その他の回答 (5)
- hige_082
- ベストアンサー率50% (379/747)
>あとマクロコードを2行にするのが出きるときと出来ない時があるのは何故でしょう。 >同じように _ アンダーバーを入れて改行してるのですがエラーになります。 スペースとアンダーバー 改行が正解
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >マクロをボタンに登録すると上の句と下の句の更新が後回しになります >解答用のinputboxがちゃんと先に出てきます。 >何か解決方法はありますか? 私としては、たぶん、オートシェイプのTextBox が問題かなって思います。 確かに、Excel 2003 でも挙動がおかしいです。原因はテキストメモリとGメモリとは、直接、つながっていないからだと思います。 残念ながら、質問で出ているコードでは、途中からオブジェクトをIndex を使ってしまっているので、正しい名称は分からないものの、出来れば、コントロールツールのテキストボックスとかラベルとかにしたほうが、反応は良いかもしれません。 現状のマクロコードでは、最初に、テキストボックス(Index が確実に1~6あるとします)のテキストをクリアしたらどうでしょうか? For i = 1 To 6 mySh.Shapes(i).TextFrame.Characters.Text = "" Next i
お礼
お礼が遅くなり大変申し訳なく思っています 回答ありがとうございました もうすこし勉強します
- xls88
- ベストアンサー率56% (669/1189)
整理してみました。 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
お礼
このままボタンに登録してもちゃんと動作しました とりあえず作ってみて後で整理しようと思ってたのですが 一気に解決です。 お正月にちゃんと間に合いそうです ありがとうございます
- xls88
- ベストアンサー率56% (669/1189)
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)
>あとマクロコードを2行にするのが出きるときと出来ない時があるのは 何故でしょう。 >同じように _ アンダーバーを入れて改行してるのですがエラーになります。 具体例を上げていただけないでしょうか。
お礼
すみません 自分でもどこでなるのか把握しきれてないようです もうすこしマクロをこなして具体的にここと言える時に また質問させてください ありがとうございました
お礼
お礼が遅くなりました 早速Application.ScreenUpdating = True入れてみました ばっちりです。動くようになりました。目からうろこです(ToT)/ ありがとうございます。