2013-10-07 45 views
0

我試圖使用以下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/) –

回答

2

爲什麼你這個錯誤是因爲aCell是空的原因(沒有找到匹配)。使用來自Find方法(或等價物,其中該範圍可能是Nothing)範圍之前,你必須設置的線路條件:

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

+ 1點在: - ) –

+0

@SiddharthRout謝謝:) – varocarbas

+0

但由於aCell是什麼,MSGBOX沒有得到執行 - 我如何才能被執行MSGBOX? – Aaa

3

如果.Find失敗,它將返回&設置aCellNothing如此試圖訪問任何實例成員,如.Column將引發該錯誤。

爲了防止這種情況發生,

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

+ 1 Spot On :-) –