John,
Its often possible (and preferable) to pass variables between routines as arguments rather than making use of Public variables.
This is more efficient in terms of resources consumed (Public variables are quite 'expensive') and, more importantly to my mind, makes your code easier to follow for others and easier to maintain for you.
For example, compare this:
Public iPub As Integer
Sub TestPub1()
iPub = 123
Call TestPub2
End Sub
Sub TestPub2()
MsgBox iPub
End Sub[/vba]To this:[vba]Sub TestArg1()
Call TestArg2(456)
End Sub
Sub TestArg2(iArg As Integer)
MsgBox iArg
End Sub
You could, of course, declare a variable within TestArg1, set it and then pass the variable to TestArg2 - like this:
Sub TestArg1()
Dim iTest As Integer
iTest = 789
Call TestArg2(iTest)
End Sub
Sub TestArg2(iArg As Integer)
MsgBox iArg
End Sub
HTH