ステータスバーに進行状況を表示する|Excel VBA |
処理に時間のかかるマクロを実行する場合は、現在の状況をユーザーに提示するとよいでしょう。マクロを実行したとたん、マウスポインタが砂時計になって、そのまま長時間が経過するようではユーザーが不安になるからです。
マクロの実行中にユーザーへメッセージを伝える方法はいくつかありますが、もっとも簡単な方法のひとつはステータスバーを使う方法です。
ステータスバーはExcelの画面最下部にあるバーで、アイドル状態では「コマンド」または「準備完了」と表示されています。ここにはExcelの操作中、さまざまなメッセージが表示されます。
ステータスバーに任意の文字を表示するには、ApplicationオブジェクトのStatusBarプロパティを使います。次のマクロは、ステータスバーに現在の日時を表示します。
Sub Sample1()
Application.StatusBar = Now
End Sub
ステータスバーに表示した文字列は、マクロが終了しても表示されたままになります。
Excelの操作中にExcelからのメッセージを表示するには、マクロによるステータスバーの使用が完了したことを伝えなければなりません。
ステータスバーを元の状態に戻すには、StatusBarプロパティにFalseを指定します。
Sub Sample2()
Application.StatusBar = Now
MsgBox "ステータスバーに日時を表示しました"
Application.StatusBar = False
End Sub
次のマクロは、C:\Windows\System32フォルダに存在するすべてのファイルの、タイムスタンプとファイルサイズをイミディエイトウィンドウに出力します。マクロ実行中は、ステータスバーに進行状況を表示します。
Sub Sample3()
Dim FileCount As Long, cnt As Long
Dim buf As String
Const TARGET As String = "C:\Windows\System32\"
With CreateObject("Scripting.FileSystemObject")
FileCount = .GetFolder(TARGET).Files.Count
End With
buf = Dir(TARGET & "*.*")
Do While Len(buf) <> 0
cnt = cnt + 1
Debug.Print buf & ":" & FileDateTime(TARGET & buf) & _
" " & FileLen(TARGET & buf)
Application.StatusBar = "(" & cnt & "/" & FileCount & ")" & _
String(Int(cnt / FileCount * 10), "■") & _
buf & "を処理中…"
buf = Dir()
Loop
Application.StatusBar = False
End Sub
Sample3は、時間のかかるマクロの例です。お使いのパソコンによって処理に要する時間は異なります。また、フォルダ内に存在するファイル数を取得するのに、FileSystemObjectオブジェクトを使用しています。