内容
フォームに設置したラベルを利用して、処理の進行状況を表示するプログレスバーを作成します。フォームにラベルを2つ配置し、そのうちの1つ(Label1)は、処理の進行に合わせて右方向へ伸びて行くプログレスバーとし、もう一方(Label2)は、プログレスバーの外枠と数値による%表示として使用します。開始ボタン(CommandButton1)をクリックすると処理が表示され、処理状況が100%に達すると処理終了のメッセージを表示します。また、中断ボタン(CommandButton2)をクリックすると処理を途中で終了します。
プログラミング例
以下の手順に従って、Excel VBAフォーム上にプログレスバーを作成し、処理の進行状況を表示します。
1.VBA フォームの作成
デベロッパー タブを表示し、「挿入」ボタンをクリックしてUserFormを挿入します。
2.ラベルの配置
フォーム上に2つのラベル(Label1、Label2)を配置します。Label1はプログレスバー本体、Label2は外枠と%表示のためです。
3.ボタンの配置
フォーム上にコマンドボタン(CommandButton1、CommandButton2)を配置します。これをクリックすると処理が開始されます。CommandButton1は開始ボタンとし、CommandButton2は中断ボタンとします。
3.VBA コードの追加
UserFormのコードモジュールに以下のコードを追加します。
Dim myExitFlg As Boolean
Private Sub UserForm_Initialize()
myAddWidth = Label1.Width / 100
Label1.Width = 0
myExitFlg = False
End Sub
Private Sub CommandButton1_Click()
Dim i As Long
For i = 1 To 100
Application.Wait Now() + TimeValue("00:00:01")
Label1.Width = Label1.Width + myAddWidth
Label2.Caption = i & "%"
DoEvents
If myExitFlg = True Then
If MsgBox("処理を中断しますか?", vbYesNo) = vbYes Then
Label1.Width = 0
Label2.Caption = ""
myExitFlg = False
Exit Sub
Else
myExitFlg = False
End If
End If
Next i
MsgBox "処理終了"
Unload Me
End Sub
Private Sub CommandButton2_Click()
myExitFlg = True
End Sub
4.プログレスバーの更新と中断ボタン
中断ボタン(CommandButton2)をクリックすると、CommandButton2_Click サブルーチンが実行され、IsProcessing 変数が False に設定され、処理が中断されます。
処理中は中断ボタンを押しても無視されますが、処理が終了するか中断ボタンが押されると、メッセージが表示されます。