Poor Man's Status Bar in VBA

Here's the quickest and dirtiest status bar I've ever come up with.  

This is of no use to end users, but for developers it's a quick and easy way to make sure your long-running loop isn't hung up.

Debug.Print ".";: DoEvents

Let's break this down:

  • Debug.Print: sends output to the immediate window
  • ".": any single character will do
  • ;: special syntax that prevents Debug.Print from adding a line break
  • :: character used to combine multiple lines of code (keeps this a one-liner)
  • DoEvents: yields execution so that the immediate window can be updated

Sample usage

Sub TestPoorMansStatusBar()
    Debug.Print "Starting"
    Dim i As Long
    For i = 1 To 15
        Sleep 300
        Debug.Print ".";: DoEvents
    Next i
    Debug.Print "Done"
End Sub

Here is the sample output:

The other nice thing is that the included call to DoEvents ensures that you can Ctrl + Break to pause your loop if it ends up taking a lot longer than you expected.

Image by Christian Dorn from Pixabay