2015-04-06 51 views
1

將範圍分配給Array非常簡單。儘管如此,我發現了VBA出乎意料的表現。我找不到答案,爲什麼會這樣,所以我希望有人能向我解釋爲什麼它不起作用。使用「With .. End With」將範圍分配給陣列

任務:指定一個範圍(從打開的工作簿)到數組

工作代碼

Dim vrtTabOEen() as Variant 
Dim rngTabOEen as Range 

With ThisWorkbook.Worksheets(Name_AB_Tab_Def_OEen) 
    Set rngTabOEen = .Range(Name_Tab_Def_OEen) 
    vrtTabOEen = rngTabOEen 
End With 

非工作代碼

Dim vrtTabOEen() as Variant 

With ThisWorkbook.Worksheets(Name_AB_Tab_Def_OEen) 
    vrtTabOEen = .Range(Name_Tab_Def_OEen) 
End With 

運用非工作代碼,我會得到錯誤13:類型不匹配。

問題 爲什麼我必須創建一個數組出來之前將其目標範圍內分配給類型「範圍」的變量?

回答

3

由於Worksheet返回一個通用對象並且您沒有指定值屬性,因此Variant到Variant數組的隱式強制的間接級別過高,因此您應該始終使用 。或者:

Dim vrtTabOEen() as Variant 

With ThisWorkbook.Worksheets(Name_AB_Tab_Def_OEen) 
    vrtTabOEen = .Range(Name_Tab_Def_OEen).Value 
End With 

或:

Dim vrtTabOEen as Variant 

With ThisWorkbook.Worksheets(Name_AB_Tab_Def_OEen) 
    vrtTabOEen = .Range(Name_Tab_Def_OEen) 
End With 

應該工作。

+0

感謝羅裏,它的工作。雖然我不明白你的第一句話的開頭。 「間接水平」以及「隱性強制」我都不知道。將查找他們 – AndyP 2015-04-06 10:56:14