In a large app, or even a small one, you can use Property Let and Property Get to make sure necessary variables and subsystems are initialized. This code is from a large ADSI-based program in production:
Public Property Get ADSIInitialized() As Boolean
If dso Is Nothing Then
ADSIInitialized = False
Else
ADSIInitialized = True
End If
End Property
Public Property Let ADSIInitialized(aValue As Boolean)
If aValue = False Then ' Shut everything off
Set cont = Nothing
Set dso = Nothing
Else
' Make sure we aren't already initialized
If dso Is Nothing Then
' Turn everything back on
Set dso = GetObject("WinNT:")
Set cont = dso.OpenDSObject("WinNT://" _
& Server, "", "", ADS_SECURE_AUTHENTICATION)
End If
End If
End Property
Now it's trivial to verify this component has been initialized and initialize it if necessary:
If Not ADSIInitialized Then ADSIInitialized = True