2017-10-12 2 views
0

Ich habe Probleme mit diesem Programm, das ich versuche zu schreiben. Darin muss ich ein zweidimensionales Array verwenden, das wie Array aussieht (# Zeilen in der Tabelle, 2). Aus irgendeinem Grund, obwohl ich die Anzahl der Zeilen richtig abrufen kann, erhalte ich den Compile-Fehler: Konstanter Ausdruck erforderlich.Verwenden von Rows.Count zum Zuweisen von Dimensionen zu einem mehrdimensionalen Array in VBA

Wenn mir jemand helfen könnte, wäre es sehr geschätzt. Ich kann ihm nicht einfach eine statische Zahl zuweisen, weil die Tabelle mit der Zeit immer größer wird, und ich weiß, dass Sie die Größe eines Arrays nicht ändern können, sobald es einmal erstellt ist.

Dies ist mein Code, wenn es irgendeine Hilfe zur Verfügung stellt.

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 

Die Testtabelle, die ich verwende, hat 3 Zeilen.

+0

FWIW - 'Dim Klasse Array (rowsinTable, 2) Als String' (oder die korrekte Version von' ReDim Klasse Array (rowsinTable, 2) Als String') Array ist die Dimensionierung ein 'rowsinTable + zu 1 'x '3' Array, weil Sie scheinbar die Basis 0 verwenden - das Array hat also die Größe' 0 To rowsInTable, 0 bis 2'. – YowE3K

+0

"Sie können die Größe eines Arrays nach der Erstellung nicht ändern" ist nicht unbedingt korrekt - die 'ReDim Preserve'-Anweisung erlaubt Änderungen an der letzten Dimension eines Arrays, ohne den vorhandenen Inhalt des Arrays zu beeinflussen. Sie könnten also nach dem Erstellen des Arrays entscheiden, Ihre 2 auf 3 zu erhöhen oder auf 1 zu reduzieren. Und wenn Sie "Transpose" für das Array verwenden, können Sie dann ändern, was die erste Dimension war (aber Folgendes) die Transponierte ist jetzt die zweite Dimension), grösse und transponiere sie dann wieder zurück. (Aber auf jeden Fall besser, wenn Sie die Anzahl der Zeilen kennen!) – YowE3K

Antwort

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 
Verwandte Themen