2012-10-05 698 views
0

考虑下面的VBA函数:在Excel VBA中,“IsNull()”和“var = Null”之间有什么区别?

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,我得到的问题,如果我尝试使用功能从纸张不拥有它:

埃罗EM节奏德execução '9':
Subscrito论坛做间隔。

它们之间有什么不同?为什么这样的错误恰好触发?

回答

1

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

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

其他变种包括 “为IsEmpty()”(你提到), “IsNothing()”,甚至 “ISMISSING()”:

+0

所以...使用'sheetName = Null'和'IsNull(sheetName)'有什么区别?为什么一个人工作,另一个人不工作? – XenoRo

+0

Nvm,现在我明白了... – XenoRo

1

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

因此Sheetname是空字符串,如果getFirstColumn被称为不带参数,并

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

所以去的第一个选项。

相关问题