Excel的VBA对象变量类型不匹配

问题描述:

我试图使用以下VBA代码以确定报头的在Excel电子表格中的列号:Excel的VBA对象变量类型不匹配

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

您也可能想看看[这](http://www.siddharthrout.com/2011/07/14/find-and-findnext-in-excel-vba/) –

为什么你这个错误是因为aCell是空的原因(没有找到匹配)。使用来自Find方法(或等价物,其中该范围可能是Nothing)范围之前,你必须设置的线路条件:

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

+ 1点在: - ) –

+0

@SiddharthRout谢谢:) – varocarbas

+0

但由于aCell是什么,MSGBOX没有得到执行 - 我如何才能被执行MSGBOX? – Aaa

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

为了防止这种情况发生,

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

+ 1 Spot On :-) –