0

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

那么可能是什么导致了这里的问题?

4

2 回答 2

3

如果.Find失败,它将返回并设置aCell为,Nothing因此尝试访问任何实例成员.Column都会引发该错误。

为了防止这种情况;

if not aCell Is Nothing
  MsgBox aCell.Column
else
  MsgBox "not found"
end if 
于 2013-10-07T12:31:44.037 回答
2

您收到此错误的原因是因为aCell为 null(未找到匹配项)。在使用Find方法中的范围(或等效范围,范围可能是Nothing)之前,您必须在以下行中设置条件:

If (Not aCell Is Nothing) Then
  MsgBox aCell.Column
End If
于 2013-10-07T12:31:28.917 回答