• ベストアンサー

エクセル マクロ起動中のメッセージを表示したい

いつもお世話になります。 エクセルで、マクロを起動して、動作が終了するのに時間がかかるため、起動中に、「マクロ起動中です」のメッセージが表示されるようにしたいのです。 自分なりに考えて、"A"というメッセージのみのユーザーフォームを作って、マクロの最初と最後に A.show ~中略~ A.Hide としたのですが、表示されたユーザーフォームの×印を押さないとマクロが動きません。 宜しくお願い致します。

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

  • ベストアンサー
  • Musaffah
  • ベストアンサー率36% (37/101)
回答No.5

#3です。 補足回答が遅くなってごめんなさい。 #4さん、補足回答ありがとうございました。 大きいサイズのファイルのコピー・ダウンロードをする時によく見かける ”■■■■■■□□□□”(現在進捗60%) ってやつです。 ツールボックスにプログレスバーがない場合は、[ツール]-[その他のコントロール]で"Microsoft ProgressBarControl"ってやつにチェックをつけると使えるようになります。バージョンが違うものが何種類かありますので、最新バージョンでいいと思います。 #3を書いておいてなんですが、#2さんのようにするほうがいいと思います。 作るとしたらこんな感じかな?(フォームAにprgBar[Max:100,Min:0で設定]という名前でプログレスバーを作成した場合です。) A.prgBar.Value = 0 A.Show vbModeless  ~処理~ A.prgBar.Value = 数値 '0~100の間  ~処理~ A.Hide Unload A

7-samurai
質問者

お礼

お礼が遅くなりましてすみません。 ご回答ありがとうございました。 いただいたご回答を試してからお礼を書こうと思っていたのですが、忙しくてまだ試せていないのです。 とりあえずとしては問題解決しているのですが、近いうちに必ず利用させていただきます。

その他の回答 (4)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

#3補足>プログレスバー表示 プログレスバーは、プログラムでの進行状況を表す表示です。

7-samurai
質問者

お礼

ありがとうございます。 理解できました。

  • Musaffah
  • ベストアンサー率36% (37/101)
回答No.3

それか、そのフォーム(A.frm)でマクロを実行するようにするのも手かも。 時間がかかるマクロであれば、そのうちプログレスバー表示させたいと言ったさりげない要求も出てくると思いますよ。

7-samurai
質問者

補足

ご回答ありがとうございます。 ですが、浅学なものでして、「プログレスバー表示」という言葉の意味がわからないのです。 ネットで検索してみたのですが、今一意味が分かりません。 お手数をおかけして恐縮に存じますが、どのような機能か、どのように使うかを、教えていただけませんでしょうか?

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

A.show vbModeless にします。指定しない場合は、モーダルになっているので、他の操作が行えません。 また、こうすると、フォームの更新がおこなわれなくなるので、 #1さんのようにDoEventsを入れるとよろしいかと思います。

7-samurai
質問者

お礼

ありがとうございます。お礼が遅くなりまして申し訳ございませんでした。 ご回答をいただいて直ぐに試してみた所、簡単に上手くいきました。 まだDoEventsを試せていないので、こちらも使えるように頑張ります。

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

サンプルです。 DoEvents を入れるのでは? Private Sub UserForm_Activate() For i = 1 To 10 ^ 3  DoEvents '←これを入れる  If i Mod 100 = 0 Then  Me.TextBox1.Value = Format$(Now, "hh:mm:ss")  End If Next i MsgBox "終了" Unload UserForm1 End Sub

7-samurai
質問者

お礼

お礼が遅くなりましてすみません。 ご回答ありがとうございました。 いただいたご回答を試してからお礼を書こうと思っていたのですが、忙しくてまだ試せていないのです。 とりあえずとしては問題解決しているのですが、近いうちに必ず利用させていただきます。