2017-10-12 69 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