Excel VBA对象variablestypes不匹配

我正在尝试使用以下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:“对象variables或块variables未设置”。

根据我在互联网上阅读的post,当您尝试将一种types的值分配给已被声明为不同types的variables时,会发生此错误。

但是,我想明白为什么我在这里得到这个错误,因为aCell是一个范围对象,我只是采取aCell.Column ,但是当我做Range("A1").Column我得到有效的1印在屏幕。

那么可能是什么原因造成了这个问题呢?

你得到这个错误的原因是因为aCell是空的(没有find匹配)。 在使用Find方法(或等效方法,范围可能为Nothing )的范围之前,必须在以下行上设置条件:

 If (Not aCell Is Nothing) Then MsgBox aCell.Column End If 

如果.Find失败,它将返回&设置aCellNothing所以试图访问像.Column任何实例成员将引发该错误。

为了防范这一点,

 if not aCell Is Nothing MsgBox aCell.Column else MsgBox "not found" end if