• ベストアンサー

エクセルVBEモジュールにif then elseを使ってマクロを書き

エクセルVBEモジュールにif then elseを使ってマクロを書きました。thenとelseの中間ぐらいでmsgbox”お知らせ”を書いて実行するとメッセージボックスは正しく表示します。しかしポインターがメッセージボックスウィンドウの外にあるときは砂時計が動き続け、メッセージボックスの上に置けば普通の矢印に変わります。砂時計を出さない方法はどうしたらよいのでしょうか。msgbox”お知らせ”の下行に続けてexit subまたはon error goto 0を書いてもやはり時計がでてしまいます。どうしたらよいのでしょうか。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

コード実例が書いてなくて、情況が理解しづらく、言っていることがおかしいように思う。 挿入ー標準モジュールに(標準モジュールに入れてますか) Sub test01() If Cells(1, "A") = "1" Then MsgBox "1です" Else MsgBox "1では在りません" End If End Sub と入れてA1セルに1を入れて実行。 また2を入れて実行。 で質問と同じ現象になりますか? 質問者のコードはこれと似たようなコードですか。 そもそも質問をするのに、短いならばコードを挙げて質問するものですよ。 一瞬以上の砂時計が出るとは考えられない。 砂時計が出るのは、内部処理に時間がかかっているためで、 OSの仕組みに根ざしているので、出さないようにすると言う選択肢は、普通それだけを問題にされない。 ユーザー側で意識的に出すようにするのか下記コード。 他にカーソルポインターの形は、変えることが出来る。 http://support.microsoft.com/kb/408038/jaを参照。 時間がかかる処理をやってみると Sub test02() For i = 1 To 100000000 i = i + 1 Next i MsgBox "終了" End Sub のようなものだと数秒間は砂時計が現れるとおもう。 ーーーー 他にマウスカーソルをエクセル画面内で変える ub test02() 'Application.Cursor = xlWait '砂時計 'Application.Cursor = xlDefault Application.Cursor = xlNorthwestArrow 'Application.Cursor = xlIBeam For i = 1 To 100000000 i = i + 1 Next i MsgBox "終了" End Sub の上の4行。しかしこれは処理中の砂時計と同類のことではない。

kafun-show
質問者

お礼

かなり長いマクロだったので全部読んでいただくのが悪い気がして簡単に書きすぎました。もう少し表現が上手になるよう努力します。 Application.Cursor = xlDefaultをメッセージの直前に挿入したら砂時計は出なくなり、無事次へ進めることができました。ありがとうございます。

その他の回答 (2)

  • hananoppo
  • ベストアンサー率46% (109/235)
回答No.2

ANo.1です。更に付け加えると、メッセージ表示の間、マクロは待機状態にあります。よって、「OK」ボタンをクリックした後、MsgBoxの次のステートメントが実行されます。

  • hananoppo
  • ベストアンサー率46% (109/235)
回答No.1

メッセージボックスが表示されている間は、まだマクロ実行の途中にあります。従って、砂時計が表示されます。「OK」ボタンをクリックしてマクロを終了するまで、砂時計は消えません。

関連するQ&A