2017-09-07 2 views
0

Noch ein Thema mit mehrdimensionalen Array und Redim Preserve, ich weiß. Ich lese viele von ihnen, verstehe aber immer noch nicht, warum mein Code nicht funktioniert.Problem mit Redim Preserve (2D-Array)

Ich wow, dass Sie nur die letzte Dimension erweitern können und es ist was ich will: fügen Sie eine neue Spalte zu meinem 2D-Array.

Um das Problem zu isolieren, teste ich 2 Code:

Sub test_Redim_Preserve() 

Dim arr() As Variant 

ReDim arr(10, 10) 
ReDim Preserve arr(UBound(arr,1), UBound(arr,2) + 1) 

End Sub 

Diese Arbeit fein

Sub test_Redim_Preserve2() 

Dim arr() As Variant 

ReDim arr(10, 10) 
arr = Range("A1:J10") 
ReDim Preserve arr(UBound(arr,1), UBound(arr,2) + 1) 

End Sub 

Das bin ich einen Fehler geben. Ich habe gerade einen Bereich angegeben, um mein Array zu füllen, und dann kann ich es nicht mehr redimieren. Ich verstehe nicht, was fehlt, um die Redim zu akzeptieren.

Könnte mir jemand erklären?

Antwort

2

Die Standarduntergrenze ist 0, wenn keine Option Base-Anweisung vorhanden ist, aber Sie ordnen einem Array einen Bereich zu, der immer eine Untergrenze von 1 hat. Daher versucht Ihr Code, die Größe zu ändern erste Dimension des Arrays auch durch Ändern seiner unteren Grenze. Verwendung:

ReDim Preserve arr(1 To UBound(arr, 1), 1 To UBound(arr, 2) + 1) 
+0

Ok ich jetzt verstehen. Ich dachte, dass der erste Wert aus meinem Bereich nach arr (0,0) gehen würde, aber stattdessen nach arr (1,1). Danke für deine Erklärung und Lösung. –

2

Sie Option Base 1 an der Spitze des Codes verwenden können, und dann wird Ihr Original-Code funktionieren.

Voll Code:

Option Base 1 

Sub test_Redim_Preserve2() 

Dim arr() As Variant 

ReDim arr(10, 10) 
arr = Range("A1:J10") 
ReDim Preserve arr(UBound(arr, 1), UBound(arr, 2) + 1) 

End Sub 
+0

Danke für Ihre Lösung auch. –