- 締切済み
EXCELマクロ実行中に
EXCELのマクロを実行中にのみ「処理中…」などの表示を出させ、処理終了後に表示を消すということは可能でしょうか? ちなみにEXCELは2000です。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- TTak
- ベストアンサー率52% (206/389)
> ループ処理の代わりに各処理終了後に段階表示できるように変数を加算 ということは、 ProgressBar1.Value =0 処理1 ProgressBar1.Value =50 処理2 ProgressBar1.Value =100 処理3 のような形でしょうか? 0のまま進まないということは(エラーはないですよね?)、上記の例で、 1) 処理2処理3が処理1に比べとんでもなく早い 2) エラー処理などのルーチンがあって、処理1のどこかでそっちに飛んでいる 3) 処理1でApplication.ScreenUpdating=Falseが実行されている などが考えられます。F8でマクロをステップ実行してみると良いでしょう。
- project-a
- ベストアンサー率54% (107/195)
ユーザーフォームで作成してはどうでしょうか? 小さいユーザーフォームを作成して、StartUpPosition プロパティを "2-画面の中央" にします。 中央にラベルを配置して Caption プロパティを "しばらくお待ちください" とします。 実際の処理では、例として Private Sub CommandButton1_Click() UserForm1.Show 0 'ユーザーフォームを表示 <実際の処理を記述> UserForm1.Hide 'ユーザーフォームを非表示 End Sub とすると、処理中は画面中央に"しばらくお待ちください" と表示され、処理が終わると消えます。
お礼
ありがとうございます! そうですね。シンプルでとても良い案だと思います。 早速利用させていただきます。
- TTak
- ベストアンサー率52% (206/389)
できます。 フォームにプログレスバーを配置します。 ループ処理の場合は、プログレスバーのゲージをループ終了までの回数のパーセンテージに応じて、増加させていきます。 ループでなくWindowsの処理待ちの場合は、プログレスバーのゲージを適当な所で止めるしかありません。 VBEのツールボックスで右クリックして、[その他のコントロール]を選択、利用可能なコントロールの一覧から、"Micrsoft ProgressBar Control, varsion?"を選択してください。ツールボックスにプログレスバーコントロールのボタンが現れます。 下記はユーザーフォームに配置したCommandButton1のクリックで、ProgressBar1のゲージを100回ループの進行と共に増加させる例です。 Private Sub CommandButton1_Click() Dim n As Integer n = 100 For i = 0 To n ProgressBar1.Value = (i / n) * ProgressBar1.Max Next i End Sub
お礼
処理がループ処理でないため、ループ処理の代わりに各処理終了後に段階表示できるように変数を加算していったのですが、プログレスバーが0のまま進みませんでした。 なぜでしょう…??
- merlionXX
- ベストアンサー率48% (1930/4007)
簡単に、StatusBar を利用する方法もありますね。 Sub test() With Application For i = 1 To 10000 x = Int(i / 100) .StatusBar = "処理中: " & .Rept("|", x) Next .StatusBar = "" End With End Sub
お礼
ご回答ありがとうございます! が、上記方法がよく分かりません… ちなみに処理はループ処理ではありません。
補足
すいません。わかりにくかったため見落としていました。 画面中央付近に表示させたいのです。
- pc_knight
- ベストアンサー率66% (52/78)
プログレスバーに処理の進行状況を表示させる方法はいかがでしょうか。 プログレスバー表示を処理に数分かかる処理に組み込んでみましたが、進捗状況がアナログ表示されるので重宝しております。
お礼
ありがとうございます! が、うまくいきません… プログレスバーが0のまま動きません。 (1)ループ処理ではないから(?) (2)あちこちのシートに跳んで処理しているから(?) 原因不明です。 screenupdating=false にして処理をしているからでしょうか? (表示の都度切り替えましたがダメでした) う~ん…
お礼
再度ありがとうございます。 そうです。そのように処理しています。 結局できたのですが、原因はユーザーフォームの「ShowModal = True」 になっていました。これを「False」にする事で解消しました。 ただ、ユーザーフォームの下地が白くなってしまうんですよね…