VBA 2013中的IsNothing等价函数

4

我目前正在调试一个使用VBA 2005编写的数据库应用程序,它无法与VBA 2010及以上版本一起使用。其中一个(许多)问题是它使用函数IsNothing来测试对象变量是否附加了对象。但是,这个函数似乎已经在2010和2013中被弃用了。在VBA 2013中有没有类似于这个函数的替代品呢?

4个回答

3
正如其他人所指出的那样,IsNothing从未成为VBA函数,很可能是作为Is Nothing的语法糖而编写的。 VB拥有一个提供相同功能的IsNothing函数。根据我的经验,定义与熟悉的VB函数相似的VBA函数是很常见的。
这里是来自Tek-Tips的VBA IsNothing实现,应该可以满足您的需求——要么使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之前建议的,只是在其他地方引用,并以最佳猜测的方式为你正在调试的代码添加了前置条件。

虽然我们讨论的主题是Microsoft Access,但值得注意的是,本材料适用于所有托管VBA的Microsoft Office应用程序,包括Excel、Outlook、PowerPoint、Visio和Word,更不用说还有一些其他托管VBA的应用程序了(比如Corel Draw)。 - David A. Gray

2

Access VBA没有包含IsNothing函数。如果您以前有这个函数,那么它是一个自定义函数。

如果您无法找到旧版本,可以创建一个新的函数。

Public Function IsNothing(ByRef pObject As Variant) As Boolean
    IsNothing = (pObject Is Nothing)
End Function

我想你的意思是“...不包括一个IsNothing函数”? - J0e3gan

0

怎么样?

Dim x as Object

If x is Nothing then

0

IsNothing本身从未是VBA函数...

If obj Is Nothing Then...

这个方法可能对你有用,但是可能不会产生你期望的IsNothing函数相同的结果。根据你想要确定的内容,你可能需要编写更具体的检查代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接