2012-08-30 35 views
3

這是一個非常簡單的問題,但我一直對我的頭撞了一個小時。我試圖做到以下幾點:Excel VBA - 下標超出單維數組的範圍

  1. 定義在我的電子表格從命名範圍內的VBA陣列
  2. 訪問數組中的一個項目現在

,如果指定的範圍恰好覆蓋多維區域(行和列),則該正常工作:

foobar = Range("two_dimensional_range") 
MsgBox foobar(1,1) 

然而,如果指定的範圍包括數據的一個維度(只是一個列)的,那麼這將產生一個「下標區t的範圍「錯誤:

foobar = Range("one_dimensional_range") 
MsgBox foobar(1) 

我已驗證foobar是一個真正的數組。我可以用For Each ... Next來遍歷它。如果我叫Ubound(foobar),那麼它會給我正確的尺寸。我無法直接訪問它的單個元素!

我在做什麼錯?

+1

如何foobar的聲明? –

回答

6

當您將一個範圍(不是單個單元格)分配給變量數組時,它將始終是一個多維數組,因此此MsgBox foobar(1,1)仍然可以在第二個實例中工作。

見這個例子

Option Explicit 

Sub Sample() 
    Dim Ar As Variant 

    Ar = Range("A1:A2") 

    Debug.Print Ar(1, 1) 
    Debug.Print Ar(2, 1) 
End Sub 

又如

Option Explicit 

Sub Sample() 
    Dim Ar As Variant 

    Ar = Range("A1:B2") 

    '~~> Get Values from Col A 
    Debug.Print Ar(1, 1) 
    Debug.Print Ar(2, 1) 

    '~~> Get Values from Col B 
    Debug.Print Ar(1, 2) 
    Debug.Print Ar(2, 2) 
End Sub 
+0

但是爲什麼? -_- – Holene