2017-12-13 4 views
0

Ich muss ein mehrdimensionales Array erstellen, aber ich kenne die Höhe des Arrays nicht. Ich bekomme diesen Wert und speichern ihn in einer Variablen. Leider kann ich beim Deklarieren des Arrays keine Variable verwenden, ich muss Konstanten verwenden. Also dachte ich, ich könnte einfach eine Konstante aus der Variablen deklarieren, aber dann bekomme ich den gleichen Fehler "Constant Expression Required" nur in einer früheren Zeile.Ist es möglich, eine Konstante basierend auf dem Wert einer bereits vorhandenen Variablen in VBA zu deklarieren?

lr = Tables.Cells(Rows.Count, 1).End(xlUp).Row 

Const constlr As Integer = lr 

Dim TableNamesArr(2 To constlr, 1 To 4) As String 
Dim i As Integer, j As Integer 

For i = 2 To lr 
    For j = 1 To 4 
     TableNamesArr(i, j) = Tables.Cells(i, j).Value 
    Next j 
Next i 

Aktuell Zeile 3 ist die Frage - Konst constlr As Integer = lr

aber wenn ich diese Zeile entfernen und alle constlr zu lr ändern, dann ist es Linie 5 - Dim TableNamesArr(2 To lr, 1 To 4) As String.

Das lr das Problem ist, braucht es eine ganze Zahl oder eine Konstante sein, aber keine Variable hält eine ganze Zahl

Der Code funktioniert gut, wenn ich ändern:

Const constlr As Integer = lr  

zu

Const constlr As Integer = 102 
+0

Welche Zeile Ihres Codes verursacht einen Fehler? –

+0

Derzeit 3 ​​- Const Constrlr As Integer = lr aber wenn ich diese Zeile entfernen und alle Constrlr zu Ir ändern, dann ist es Zeile 5 - Dim TableNamesArr (2 bis lr, 1 bis 4) als String. Die lr ist das Problem, braucht es eine ganze oder konstant sein, aber nicht um eine Variable für eine ganze Zahl –

+0

Die Antwort auf Dich Haupt (Titel) Frage hält, ist ** Nein, Sie können dies nicht tun ** und der Beweis ist in Ihrem Frage und Ihre Tests (letzte Zeilen). Meine Frage ist - warum denkst du, du musst "lr" als konstant setzen? Denken Sie an konstante Definition - es ist etwas, das Sie nicht ändern, aber Sie möchten es ändern. Es macht nicht Sinn. –

Antwort

0

Sie können Werte aus dem Bereich ohne Schleifen auf einfache Weise lesen:

Dim DirArray As Variant 
DirArray = Range("a1:a5").Value 

Statt Range ("a1: a5") Sie können Ihr Angebot durch Auswahl oder andere Methoden Selection.Value oder Activesheet.UsedRange.Value verweisen.

Wenn Ihr Bereich in einer Tabelle ist, können Sie diesen Code versuchen, aus here gestohlen:

Sub MultiColumnTable_To_Array() 

Dim myTable As ListObject 
Dim myArray As Variant 
Dim x As Long 

'Set path for Table variable 
    Set myTable = ActiveSheet.ListObjects("Table1") 

'Create Array List from Table 
    myArray = myTable.DataBodyRange 

'Loop through each item in Third Column of Table (displayed in Immediate Window [ctrl + g]) 
    For x = LBound(myArray) To UBound(myArray) 
    Debug.Print myArray(x, 3) 
    Next x 

End Sub 
0

Sie eine Variable in Redim verwenden können, nicht in Dim. Sie brauchen die Konstante dafür eigentlich nicht.

lr = Tables.Cells(Rows.Count, 1).End(xlUp).Row 
Const constlr As Integer = lr 
Dim TableNamesArr() As String 
Redim TableNamesArr(2 To constlr, 1 To 4) 
Dim i As Integer, j As Integer 
For i = 2 To lr 
    For j = 1 To 4 
     TableNamesArr(i, j) = Tables.Cells(i, j).Value 
    Next j 
Next i 
Verwandte Themen