2017-10-12 102 views
0

我正在努力嘗試編寫這個程序。其中,我需要使用一個看起來像數組的二維數組(表中的#行)。出於某種原因,即使我可以正確地獲取行數,我仍然收到編譯錯誤:需要使用常量表達式。使用Rows.Count爲VBA中的多維數組分配維數

如果有人能給我任何幫助,將不勝感激。我不能只是給它分配一個靜態數字,因爲隨着時間的推移,表格總是會增加的,而且我知道一旦數組被構建就無法重新調整大小。

這是我的代碼,如果它會提供任何幫助。

Sub arrayToTest() 
Dim rng As Range, row As Range, cell As Range, RowCount As Long, rowsinTable As Integer 
Set rng = Sheets("Sheet1").Range("TestTable") 
rowsinTable = rng.Rows.Count 
Dim arrayTest(rowsinTable, 2) As String 
RowCount = 1 
For Each row In rng.Rows 
    arrayTest(RowCount - 1, 0) = rng.Cells(RowCount, 2) 
    RowCount = RowCount + 1 
Next row 
End Sub 

我使用的測試表有3行。

+0

FWIW - '暗淡ArrayTest中(rowsinTable,2)作爲String'(或'使用ReDim ArrayTest中的正確版本(rowsinTable,2)由於String')被標註您的陣列是一個'rowsinTable + 1' X '3'數組,因爲你似乎使用基數0 - 所以數組的大小爲'0到rowsInTable,0到2'。 – YowE3K

+0

「你無法調整數組的大小」並不一定是正確的 - 「ReDim Preserve」語句將允許修改數組的最後一個維度而不影響數組的現有內容。所以你可以在構建數組之後,決定將2增加到3,或者將它減少到1.並且,如果你在數組上使用了「轉置」,那麼你就可以改變第一維(但是跟隨轉置現在是第二個維度),調整大小,然後再將其轉置回去。 (但是,如果你知道行數,絕對可以像你一樣做得更好!) – YowE3K

回答

2
Sub arrayToTest() 
Dim rng As Range, row As Range, cell As Range, RowCount As Long, rowsinTable As Integer 
Dim arrayTest() As String 'First Declare the array 
Set rng = Sheets("Sheet1").Range("TestTable") 
rowsinTable = rng.Rows.Count 
ReDim arrayTest(rowsinTable, 2) As String 'Then Re-Declare it to size. 
RowCount = 1 
For Each row In rng.Rows 
    arrayTest(RowCount - 1, 0) = rng.Cells(RowCount, 2) 
    RowCount = RowCount + 1 
Next row 
End Sub