John's code in the Main procedure could call all the other routines that you
need.
Kind of:
Option Explicit
Sub Test()
' The UserForm1_Activate sub calls Main
UserForm1.LabelProgress.Width = 0
UserForm1.Show
End Sub
Sub Main()
' Inserts random numbers on the active worksheet
Dim Counter As Integer
Dim RowMax As Integer, ColMax As Integer
Dim r As Integer, c As Integer
Dim PctDone As Single
If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub
Cells.Clear
Application.ScreenUpdating = False
PctDone = 0.1
Call UpdatePB(PctDone)
'do some more stuff
Application.Wait Now + TimeSerial(0, 0, 3)
PctDone = 0.2
Call UpdatePB(PctDone)
'do some more stuff, I'm just gonna use wait to simulate more stuff
Application.Wait Now + TimeSerial(0, 0, 3)
PctDone = 0.9
Call UpdatePB(PctDone)
'do some more stuff
Application.Wait Now + TimeSerial(0, 0, 3)
PctDone = 1#
Call UpdatePB(PctDone)
'do some more stuff
Application.Wait Now + TimeSerial(0, 0, 2)
Unload UserForm1
End Sub
Sub UpdatePB(PctDone)
With UserForm1
.FrameProgress.Caption = Format(PctDone, "0%")
.LabelProgress.Width = PctDone * (.FrameProgress.Width - 10)
End With
DoEvents
End Sub
> > Maybe you could have a public variable that keeps track of the "step" that
> > you're in and have each routine increment that variable, then pass the variable
[quoted text clipped - 70 lines]
> I'm very happy for your help so far
> Regards Snoopy

Signature
Dave Peterson