VBA - Display Message on Status Bar¶
Source: Display Message on Status Bar - Erlandsen Data Consulting
See Also: VBA - Progress Bar in the Status Bar
If you turn off the screen updating, and your macros takes some time to finish, the user may think that the computer has stopped to respond.
Because of this it’s a good programming rule to inform the user of the macro progress by displaying a message on the status bar at the bottom of the screen.
Here is an example:
Sub StatusBarExample()
Application.ScreenUpdating = False
' turns off screen updating
Application.DisplayStatusBar = True
' makes sure that the statusbar is visible
Application.StatusBar = "Please wait while performing task 1..."
' add some code for task 1 that replaces the next sentence
Application.Wait Now + TimeValue("00:00:02")
Application.StatusBar = "Please wait while performing task 2..."
' add some code for task 2 that replaces the next sentence
Application.Wait Now + TimeValue("00:00:02")
Application.StatusBar = False
' gives control of the statusbar back to the programme
End Sub
Sub ShowProgress(strStatusText As String, dblPercentDone As Double)
' updated 2000-08-08 by OPE
Const clngBarSize As Long = 20, clngBarChar As Long = 45, clngProgressChar As Long = 135
Dim lngProgress As Long
If dblPercentDone < 0 Or dblPercentDone > 1 Then Exit Sub
lngProgress = CLng(dblPercentDone * clngBarSize)
Application.StatusBar = Application.Rept(Chr(clngProgressChar), lngProgress) & _
Application.Rept(Chr(clngBarChar), clngBarSize - lngProgress) & " " & _
Format(dblPercentDone, "0 %") & " " & strStatusText
End Sub
This procedure does the same as the previous one, but you have a little more options if you want to use different types of characters when displaying your progress bars.
Sub ShowProgress(strStatusText As String, dblPercentDone As Double, _
Optional lngBarChar As Long = 45, Optional lngProgressChar As Long = 135, _
Optional lngBarSize As Long = 20)
' updated 2000-08-08 by OPE
' strStatusText: text to display on the status bar
' dblPercentDone: percent finished, values between 0 to 1
' lngBarSize: count of characters in the bar, values between 10 to 100
' lngBarChar: the progress bar character
' lngProgressChar: the progress character
Dim lngProgress As Long ' count of progress characters
If dblPercentDone < 0 Or dblPercentDone > 1 Then Exit Sub
If lngBarChar < 32 Or lngBarChar > 255 Then lngBarChar = 45 ' default
If lngProgressChar < 32 Or lngProgressChar > 255 Then lngProgressChar = 135 ' default
If lngBarSize < 10 Or lngBarSize > 100 Then lngBarSize = 20 ' default
lngProgress = CLng(dblPercentDone * lngBarSize)
Application.StatusBar = Application.Rept(Chr(lngProgressChar), lngProgress) & _
Application.Rept(Chr(lngBarChar), lngBarSize - lngProgress) & " " & _
Format(dblPercentDone, "0 %") & " " & strStatusText
End Sub
You can use the procedures above like this:
Sub TestShowProgress()
Dim i As Long, lngTotal As Long
lngTotal = 10
For i = 1 To lngTotal
ShowProgress "This is a test", i / lngTotal ' first procedure
' ShowProgress "This is a test", i / lngTotal, 176, 149 ' second procedure
' replace the line below with your own task(s)
Application.Wait Now + TimeValue("00:00:01") ' just for demonstration purposes
Next i
Application.StatusBar = False
End Sub
Appendix: Links¶
Backlinks:
list from [[VBA - Display Message on Status Bar]] AND -"Changelog"