我正在尝试使用以下VBA代码确定Excel电子表格中标题的列号:
Dim aCell As Range
Set aCell = Sheet1.Rows(1).Find(What:="ContractDescription", LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
然后以下代码行给出错误:
MsgBox (aCell.Column)
它给出了运行时错误91:“对象变量或未设置块变量”。
根据我在互联网上阅读的帖子,当您尝试将一种类型的值分配给已声明为其他类型的变量时,会发生此错误。
但是,我试图理解为什么我在这里收到此错误,因为aCell
是一个范围对象而我只是采用aCell.Column
,但当我Range("A1").Column
时,我确实得到了屏幕上印有有效的1
。
那么可能导致这个问题的原因是什么?
答案 0 :(得分:3)
如果.Find
失败,它将返回&将aCell
设置为Nothing
,因此尝试访问.Column
等任何实例成员都会引发该错误。
要防范这一点;
if not aCell Is Nothing
MsgBox aCell.Column
else
MsgBox "not found"
end if
答案 1 :(得分:2)
您收到此错误的原因是aCell
为空(未找到匹配项)。在使用Find
方法(或等效方法,范围可能为Nothing
)的范围之前,您必须在以下行中设置条件:
If (Not aCell Is Nothing) Then
MsgBox aCell.Column
End If