【发布时间】:2014-04-17 13:09:17
【问题描述】:
我目前正在调试一个最初用 VBA 2005 编写的数据库应用程序,该应用程序不适用于 VBA 2010 及更高版本。 (许多)问题之一是它使用函数 IsNothing 来测试对象变量是否附加了对象。此功能似乎已在 2010 年和 2013 年弃用。在 VBA 2013 中是否有与此功能等效的功能?
【问题讨论】:
我目前正在调试一个最初用 VBA 2005 编写的数据库应用程序,该应用程序不适用于 VBA 2010 及更高版本。 (许多)问题之一是它使用函数 IsNothing 来测试对象变量是否附加了对象。此功能似乎已在 2010 年和 2013 年弃用。在 VBA 2013 中是否有与此功能等效的功能?
【问题讨论】:
正如其他人所指出的,IsNothing 从来都不是 VBA 函数,很可能是作为Is Nothing 的语法糖编写的。
VB has an IsNothing function 用于相同目的。根据我的经验,定义反映熟悉的 VB 函数的 VBA 函数是很常见的。
这里有一个VBA IsNothing implementation from Tek-Tips,它应该是您所需要的——要么让IsNothing 调用按原样工作......要么提供一个基础,用等效代码内联它们并去除语法糖:
'**********************************************************
'* Function: Returns true if argument evaluates to nothing
'* 1. IsNothing(Nothing) -> True
'* 2. IsNothing(NonObjectVariableOrLiteral) -> False
'* 3. IsNothing(ObjectVariable) -> True if instantiated,
'* otherwise False
'**********************************************************
Public Function IsNothing(pvarToTest As Variant) As Boolean
On Error Resume Next
IsNothing = (pvarToTest Is Nothing)
Err.Clear
On Error GoTo 0
End Function 'IsNothing
公平地说,请注意,这基本上是 @HansUp 已经建议的内容,只是从其他地方获取的 - 并且以最佳猜测您正在调试的代码可能如何得到它的方式开头。
【讨论】:
Access VBA 不包含IsNothing 函数。如果你过去有一个,那是一个自定义函数。
如果您无法追踪旧版本,您可以创建一个新版本。
Public Function IsNothing(ByRef pObject As Variant) As Boolean
IsNothing = (pObject Is Nothing)
End Function
【讨论】:
IsNothing 函数”?
怎么样
Dim x as Object
If x is Nothing then
【讨论】:
IsNothing 本身从来就不是 VBA 函数...
If obj Is Nothing Then...
可能对您有用,但可能不会产生与您期望的 IsNothing 函数相同的结果。根据您要确定的内容,您可能需要编写更具体的检查代码。
【讨论】: