考虑以下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论坛做间隔。
它们之间有什么区别?为什么会错误地触发这样的错误?
答案 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.
所以选择第一个选项。