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 IfEnd PropertyPublic 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 IfEnd Property
Now it’s trivial to verify this component has been initialized and initialize it if necessary:
If Not ADSIInitialized Then ADSIInitialized = True