[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『プログレスバーを用いた処理実行中の表示について』(オプウ)
こんにちは。
VBAの勉強をしていまして、プログレスバーを使った処理進捗表示について質問させていただきます。
他サイトなどを参考にしまして、UserForm2を使い以下のようなマクロで処理進捗を表示できるようにしてみました。
Sub ProgressBar1()
Dim r As Integer
UserForm2.Caption = "処理実行中" UserForm2.ProgressBar1.Value = 0 UserForm2.ProgressBar1.Min = 0 UserForm2.ProgressBar1.Max = 100
UserForm2.Show vbModeless UserForm2.Repaint
r = 3000 Application.ScreenUpdating = False For i = 1 To r Step 1
UserForm2.ProgressBar1.Value = i / r * 100 DoEvents Next i
Application.ScreenUpdating = True
Unload UserForm2
End Sub
ここまでは、よかったのですが、これを別のマクロを実行中に
表示させてやる方法がわかりません。
例えば、簡単な以下のようなマクロをUserForm1上のCommandButton1を実行させた際にマクロ処理中に表示させるにはどのようなマクロを組めばよろしいでしょうか?
Private Sub CommandButton1_Click()
MsgBox "処理が完了しました!"
End Sub
恐らく↑のようなマクロでは処理が一瞬で終わってしまうと思いますがマクロの組み方を勉強したいので、その辺りは無視していただければ幸いです。
< 使用 Excel:Excel2019、使用 OS:Windows10 >
ラベルコントロールでも2つ使い、手前側のサイズを調節することで進捗表示するとか、ステータスバーに"■□□□□□□□□□"、みたいな感じに文字を並べて表示して表現するとか、Excelの持つ機能で実現すべきと思います。
(まぁ、動かないPCが出てきてから作り直すのでも良いですけどね。苦労するのは貴方自身です)
次に、VBAは複数プロシジャが並列実行できるような言語ではありません。 なので、例えばフォーム表示、進捗率変更、フォームを閉じるという3つのプロシジャに分けて、処理中に進捗率変更のプロシジャをCallする形にするのが良いでしょう。(ステータスバー利用の場合、フォーム操作が不要なので、簡単になります)
Sub メイン処理() Call フォーム表示
'長時間かかる処理 For i = 0 to iMax Call 進捗率変更(i, iMax) Next i
Call フォームを閉じる MsgBox "処理が完了しました!" End Sub
こんな感じで、1つのプロシジャとサブプロシジャの組み合わせとしてコーディングしましょう。
(???) 2020/09/03(木) 13:37
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.