Ms access VBA检查对象是否已设置

Ms access VBA检查对象是否已设置,ms-access,vba,Ms Access,Vba,我有一个全局变量,它是自定义类的一个实例 如何检查对象是否已设置或是否需要初始化它 If obj Is Nothing Then ' need to initialize obj: ' Set obj = ... Else ' obj already set / initialized. ' End If 或者,如果您喜欢另一种方式: If Not obj Is Nothing Then ' obj already set / initialized. ' E

我有一个全局变量,它是自定义类的一个实例

如何检查对象是否已设置或是否需要初始化它

If obj Is Nothing Then
    ' need to initialize obj: '
    Set obj = ...
Else
    ' obj already set / initialized. '
End If

或者,如果您喜欢另一种方式:

If Not obj Is Nothing Then
    ' obj already set / initialized. '
Else
    ' need to initialize obj: '
    Set obj = ...
End If
这样做的(非)安全方法-如果您不使用option explicit-是

Not TypeName(myObj) = "Empty"
如果对象尚未声明,这也会处理这种情况。如果您只想注释掉一个声明以关闭某些行为,这将非常有用

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

这是因为VBA会自动将未声明的变量实例化为空变量类型。它消除了使用辅助布尔值来管理行为的需要。

当我在谷歌上搜索它时,发现什么都没有,我知道它必须简单!谢谢你的帮助!请注意,检查
obj不算什么
与检查
IsNothing(obj)
不同!感谢您使用正确的语法检查此项…不确定为什么
IsNothing()
的行为不同…我发现
not(obj什么都不是)
not obj Is Nothing
更容易理解。我的大脑不知道什么是“非obj”!你也可以这样写:如果obj不是什么,我觉得它比其他的都清楚。它也有点像C#(ojb!=null)一样。没有
选项Explicit
,任何人都不应该拥有任何VBA代码。除了问题,它什么也得不到。要“切换”行为,请使用条件编译。@andre,是的,公平点。没有它我感觉还可以,因为我使用匈牙利符号表示范围,但如果可以的话,我现在尽量避免使用vba。我看到的大部分内容都是关于显式声明、名称安全和避免可怕的变体。你的主要原因是什么?事实上,由于typename,我得到的是“Nothing”,而不是“Empty”