2017-02-22 3 views
0

In diesem question wurde mir eine Antwort gegeben, die mein Problem gelöst hat, aber als ich meinen Code durchgegangen bin, habe ich etwas merkwürdiges bemerkt. Wenn ich die 3 Arrays der Array-Variante zuordne, kann ich im lokalen Fenster sehen, dass der LBound der Variante bei 0 beginnt (wie erwartet), aber die einzelnen Arrays LBound beginnen bei 1, obwohl ich oben Option Base 0 geschrieben habe Modul. Ist das richtig?LBound von Arrays innerhalb der Variante

-Code aufzufüllen Array

Public Sub FillArray(ByRef data As Variant, 
        sRange As String) 
data = oCurrentWs.Range(sRange) End Sub 
+0

Ist Ihre Füllung Arrays für x = 1 bis y auf dem Bereich oder bevölkert es mit arr = Bereich (x), können Sie einen Touch mehr Code um was Sie haben? –

+0

Hallo Nathan, ich habe: 'Public Sub FillArray (ByRef Daten als Variante, sRange als String)' 'Daten = oCurrentWs.Range (sRange)' 'End Sub' – KnightFallz

Antwort

0

es ist, weil die Zuordnung eines Range zu einem Variant beginnen würde immer Ergebnis in einem 1-low-bounded Array, unabhängig von Option Base Einstellung.

wie können Sie mit diesem Test finden Sie unter:

Public Sub FillArray(ByRef data As Variant, sRange As String) 
     With oCurrentWs.Range(sRange) 
      ReDim data(0 To .Rows.Count - 1, 0 To .Columns.Count - 1) '<--| this dims 'data' as a 0-based array 
      data = .Value '<--| this redims 'data' as a 1-based array 
     End With 
    End Sub 

so, wenn Sie wirklich Notwendigkeit 0-basiert haben Arrays Sie wie zu kodieren haben folgt:

Public Sub FillArray(ByRef data As Variant, sRange As String) 
    Dim i As Long, j As Long 
    With oCurrentWs.Range(sRange) 
     ReDim data(0 To .Rows.Count - 1, 0 To .Columns.Count - 1) '<--| dim 'data' as a zero-based array 
     For i = 1 To .Rows.Count '<--| loop through referenced range rows 
      For j = 1 To .Columns.Count '<--| loop through referenced range columns 
       data(i - 1, j - 1) = .Cells(i, j) '<--| fill each array element individually 
      Next 
     Next 
    End With 
End Sub 
+0

Nur zurückkommen. Danke für die Erklärung und den Beispielcode. Ich habe es getestet und es funktioniert super, vielen Dank. – KnightFallz

+0

Gern geschehen. – user3598756

1

Variant-Arrays dynamische Arrays des Variantentyp diese verwenden "= Array()" initialisiert.

Vorteil

wie sie initialisiert werden mit „= Array()“, LBound und UBound Funktionen mit ihnen zu arbeiten, auch wenn sie keine Elemente haben:

Dim varr As Variant 

    varr = Array() 

    Debug.Print LBound(varr) 'Prints 0 
    Debug.Print UBound(varr) 'Prints -1 

Jetzt können wir auch ein Element hinzufügen, ohne zu überprüfen für UBound-Fehler

Excel-Bereiche Verwenden Sie Basis 1

Wenn ein Array gerade aus einem Bereich aufgefüllt wird die Anordnung bei 1 und nicht 0

Weitere Informationen finden Sie in der Cells & Ranges > Working With Arrays

+0

Während ich die Antwort zu schätzen, es nicht betrifft zu dem Problem, das ich beschrieben habe, da es kein Problem mit dem LBound und UBound der Variante gibt. Sehen Sie sich das Bild unter dem folgenden Link an, auf dem das Problem zu sehen ist: http://i.imgur.com/J7uzspf.png – KnightFallz

Verwandte Themen