考虑以下 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 tempo de execução '9':
Subscrito fora do intervalo.
它们之间有什么区别?为什么会准确触发这样的错误?
最佳答案
“sheetName”是一个变量。该变量可能是未定义的,可能是指一个对象......或者可能是 NULL。
如果它是一个对象,则该对象本身可能评估为变量值 NULL。因此,“IsNull()”函数。
其他变体包括“IsEmpty()”(您提到过)、“IsNothing()”甚至“IsMissing()”:
关于excel - 在 Excel VBA 中, "IsNull()"和 "var = Null"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12750839/