Excel VBA对象变量类型不匹配

时间:2013-10-07 12:24:57

标签: excel vba excel-vba

我正在尝试使用以下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

那么可能导致这个问题的原因是什么?

2 个答案:

答案 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