在Excel VBA中,“IsNull()”和“var = Null”之间有什么区别?

时间:2012-10-05 17:00:57

标签: excel-vba null runtime-error string vba

考虑以下VBA功能:

Function getFirstColumn(Optional sheetName As String) As Long
    'In particular the IF statement below.
    If sheetName = "" Or sheetName = Null Then sheetName = ActiveWorkbook.ActiveSheet.Name
    With ActiveWorkbook.Worksheets(sheetName)
        getFirstColumn = .Cells.Find("*", .Cells(1), xlFormulas, xlWhole, xlByColumns, xlNext).Column
        If Err <> 0 Then getFirstColumn = 0
    End With
End Function

使用此功能时,从第二张打开的纸张使用时我没有问题。

但是当代码更改为基于函数的等效代码'If IsEmpty(sheetName) Or IsNull(sheetName) Then sheetName = ActiveWorkbook.ActiveSheet.Name时,如果我尝试使用不属于它的工作表中的函数,我会遇到问题:

  

Erro em tempodeendoção'9':
  Subscrito论坛做间隔。

它们之间有什么区别?为什么会错误地触发这样的错误?

2 个答案:

答案 0 :(得分:1)

“sheetName”是一个变量。变量可能未定义,可能引用对象......或者可能为NULL。

如果它是一个对象,则该对象本身可能会计算变量值NULL。因此“IsNull()”函数。

其他变体包括“IsEmpty()”(你提到过),“IsNothing()”甚至“IsMissing()”:

答案 1 :(得分:1)

在VBA中,未指定的可选字符串计算为空字符串。

因此,如果在没有参数的情况下调用getFirstColumn,则sheetName为空字符串,并且

sheetName = "" is true
isEmpty(sheetName) is false
isNull(sheetName) is false
sheetName = Null is Null btw.

所以选择第一个选项。