【发布时间】:2011-02-07 13:39:26
【问题描述】:
我有一个全局变量,它是我的自定义类的一个实例。
如何检查对象是否已设置或是否需要初始化?
【问题讨论】:
我有一个全局变量,它是我的自定义类的一个实例。
如何检查对象是否已设置或是否需要初始化?
【问题讨论】:
使用全局变量时,可能会遇到对象为空的情况。所以,代码:
If Not obj Is Nothing Then
'obj is already set
Else
'set obj
End If
产生“需要对象”错误。
在这种情况下,以下工作:
'First check it is initialized
If IsObject(obj) Then
'Then check if it is set
If Not obj Is Nothing Then
'obj is set
Else
'set obj
End If
End If
【讨论】:
执行此操作的(不)安全方法 - 如果您可以不使用选项显式 - 是...
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 会自动将未声明的变量实例化为 Empty Variant 类型。它消除了对辅助布尔值来管理行为的需要。
【讨论】:
Option Explicit,任何人都不应该拥有任何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. '
Else
' need to initialize obj: '
Set obj = ...
End If
【讨论】:
obj Is Nothing 与检查IsNothing(obj) 不同!感谢您提供正确的语法来检查...不知道为什么IsNothing() 的行为不同...
Not (obj Is Nothing) 比Not obj Is Nothing 更容易理解。我的大脑不知道什么是“Not obj”!