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”