[[20200903114848]] 『プログレスバーを用いた処理実行中の表示について』(オプウ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『プログレスバーを用いた処理実行中の表示について』(オプウ)

こんにちは。

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 >


まず、ProgressBarコントロールはVB6に付属するものであり、Excel標準のコントロールではありません。 つまり、PCによっては動かない場合があります。

ラベルコントロールでも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.