This is the progress bar I've used for the last five or six years (originally posted in http://www.mrexcel.com/forum/excel-questions/527468-progress-bar.html).
I'd follow Rorys advice though and use a listbox if you're creating potentially hundreds of controls.
Create a form called 'Progress Bar'
Give it these dimensions:
Name: ProgressBar
Height: 49.5
Width: 483.75
ShowModal: False <---- Important this bit or it won't update properly.
Add a label to the form with these dimensions:
Name: BoxProgress
Caption: BoxProgress
Height: 18
Left: 6
Top: 6
Width: 468
BackColour: &H008080FF&
In a normal module add this procedure:
Sub UpdateProgressBar(n As Long, m As Long, Optional DisplayText As String)
'// DarkSprout April08
'// Omit DisplayText to display progress percentage
On Error GoTo ERR_HANDLE
If n >= m Then
ProgressBar.Hide
Else
If ProgressBar.Visible = False Then ProgressBar.Show
ProgressBar![BoxProgress].Caption = IIf(DisplayText = "", Round(((n / m) * 10000) / 100) & "%", DisplayText)
ProgressBar![BoxProgress].Width = (n / m) * 468
DoEvents
End If
Exit Sub
ERR_HANDLE:
Err.Clear
ProgressBar.Hide
End Sub
Use it in your code like this:
Sub test()
Dim x As Long
For x = 1 To 100
UpdateProgressBar x, 100
Next x
End Sub
You'll need to call the procedure every time you want the progress bar to update.
The variables:
m represents the maximum number the bar will reach and n represents the current value to display.