2017-10-05 211 views
0

我寫了波紋管代碼,它在即時窗口中打印210將範圍的值分配給數組

Sub RangeToArr() 
    Dim data() As Variant 
    data = Range("Salary[EmpNum]").Value 
    Debug.Print UBound(data) 
End Sub 

當我使用波紋管時,將顯示Subscript out of range運行時錯誤消息。

Sub RangeToArr() 
    Dim data() As Variant 
    data = Range("Salary[EmpNum]").Value 
    Debug.Print data(210) 
End Sub 

如果data是一個數組,這是什麼問題,否則,如何可以訪問分配到一個數組範圍的值,如上面?

+0

還用斷點檢查局部窗口中的數據範圍,它只是一個維度嗎?即使列數據的範圍可以是(1到210,1到1)。再看看這個,假設你想要數據來表示範圍,從賦值行中刪除'.Value'部分。 – Zerk

+0

超出範圍,是過濾表格範圍的列。範圍是6到215 – mgae2m

+0

什麼是薪水[EmpNum]? – Vityata

回答

2

如果您嘗試返回數據(210),則將其引用爲單維數組,則轉換爲數組的範圍將創建2維數組。您可以通過返回

data(210, 1) 

我只能假設,爲什麼它迫使一個2維數組的原因得到該範圍內的第210單元格的值。我的猜測是因爲如果你的範圍包括額外的列它將是2維數組。即使您只有一列,創建2維數組的行爲也意味着處理數據的方法保持不變。這是一個例外 - 如果您的範圍是單個單元格,VBA將僅將該值填充爲單個維度。

+0

如果Salary [EmpNum]是單列,則數組大小應該是數據(1到210,1)。我不介意糾正我的答案,如果它是錯誤的,但我需要了解我的假設中有什麼錯,所以我可以相應地更新。 – Dave

1

爲確保您的示例有效,請確保您的表格示例中有210行。


在一般情況下,嘗試這樣的事情來獲得陣列和範圍的想法:

  • 木箱與多列和多行
  • 把一個簡單的命名範圍MyNamedRange在它的一些價值觀
  • 運行這個,看看你在即時窗口中得到什麼:

Sub RangeToArr() 

    Dim arrVar As Variant 
    arrVar = Range("MyNamedRange") 
    Debug.Print arrVar(1, 2) 

End Sub 

更改(1,2)值有點想法。