【问题标题】:In Excel VBA, what are the differences between "IsNull()" and "var = Null"?在 Excel VBA 中,“IsNull()”和“var = Null”有什么区别?
【发布时间】:2012-09-26 21:08:07
【问题描述】:

考虑以下 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 时,如果我尝试使用不属于它的工作表中的函数,我会遇到问题:

错误的执行速度'9':
订阅fora do intervalo。

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

【问题讨论】:

    标签: excel null runtime-error string vba


    【解决方案1】:

    “sheetName”是一个变量。该变量可能是未定义的,可能是指一个对象...或者可能是 NULL。

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

    其他变体包括“IsEmpty()”(您提到的)、“IsNothing()”甚至“IsMissing()”:

    【讨论】:

    • 那么...使用sheetName = NullIsNull(sheetName) 有什么区别?为什么一个有效而另一个无效?
    【解决方案2】:

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

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

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

    所以选择第一个选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2017-04-07
      • 2019-09-21
      • 2018-12-07
      • 1970-01-01
      • 1970-01-01
      • 2019-02-04
      相关资源
      最近更新 更多