Ich habe eine globale Variable, die eine Instanz meiner benutzerdefinierten Klasse ist.
Wie überprüfe ich, ob das Objekt festgelegt ist oder ob ich es initialisieren muss?
Ich habe eine globale Variable, die eine Instanz meiner benutzerdefinierten Klasse ist.
Wie überprüfe ich, ob das Objekt festgelegt ist oder ob ich es initialisieren muss?
Antworten:
If obj Is Nothing Then
' need to initialize obj: '
Set obj = ...
Else
' obj already set / initialized. '
End If
Oder, wenn Sie es andersherum bevorzugen:
If Not obj Is Nothing Then
' obj already set / initialized. '
Else
' need to initialize obj: '
Set obj = ...
End If
obj Is Nothing
NICHT mit dem Prüfen identisch ist IsNothing(obj)
! Vielen Dank für die korrekte Syntax, um dies zu überprüfen ... nicht sicher, warum IsNothing()
sich anders verhält ...
Not (obj Is Nothing)
leichter zu verstehen als Not obj Is Nothing
. Mein Gehirn weiß nicht, was ein "Not obj" ist!
Der (un) sichere Weg, dies zu tun - wenn Sie damit einverstanden sind, die Option nicht explizit zu verwenden - ist ...
Not TypeName(myObj) = "Empty"
Dies behandelt auch den Fall, wenn das Objekt nicht deklariert wurde. Dies ist nützlich, wenn Sie nur eine Deklaration auskommentieren möchten, um ein bestimmtes Verhalten auszuschalten ...
Dim myObj as Object
Not TypeName(myObj) = "Empty" '/ true, the object exists - TypeName is Object
'Dim myObj as Object
Not TypeName(myObj) = "Empty" '/ false, the object has not been declared
Dies funktioniert, weil VBA eine nicht deklarierte Variable automatisch als leeren Variantentyp instanziiert. Es ist kein zusätzlicher Boolescher Wert erforderlich, um das Verhalten zu verwalten.
Option Explicit
. Es gewinnt nichts außer Probleme. Verwenden Sie die bedingte Kompilierung, um das Verhalten zu "wechseln".