2017-03-13 3 views
1

Ich versuche auf Elemente einer Variante zuzugreifen, die ich über Bereiche in einer Excel-Tabelle erstellt habe. Die Anzahl der Zeilen in meinem Bereich ist dynamisch basierend auf der Anzahl der Zeilen im Blatt "Standorte". Daher deklariere ich einfach eine Variante und setze sie dann gleich dem relevanten Bereich. Ich benutze die 4 Variablen, denen Loc vorangestellt ist, um die Grenzen zu finden, und setze die Variante, sobald ich diesen letzten Bereich erstellt habe.Varianten/Iterating/VBA

Ich kann jedoch nicht durch zahlreiche Versuche iterieren. Ich bin sicher, dass ich etwas Grundlegendes vermisse, aber noch die For Every oder für LBound/UBound-Strukturen arbeiten für Array-Iteration machen müssen. Die Variantendaten sind eine Mischung aus Zahlen und Text.

Ihre Gedanken zu der einfachen/einfachen Sache, von der ich sicher bin, dass ich vermisse, werden geschätzt. Ich verstehe, dass für jede schreibgeschützt ist und würde es vorziehen, lesen/schreiben, aber jetzt einfach sicherstellen möchten, kann ich überhaupt durch dieses Array iterieren [wirklich eine Matrix]

Sub Prefill_Work_Sub() 
    ' Variables 
    Dim LocRowStart As Range 
    Dim LocRowEnd As Range 
    Dim LocSheetRange As Range 
    Dim EndColInt As Integer 
    Dim LocationsVariant As Variant 

    ' Ending Column Index Set 
    EndColInt = 72 

    ' First, make range of location sheet 
    Set LocRowStart = Worksheets("Locations").Range("A2") 
    Set LocRowEnd = Worksheets("Locations").Cells(Rows.Count, LocRowStart.Column).End(xlUp) 
    Set LocColEnd = Worksheets("Locations").Cells(LocRowEnd.row, EndColInt) 
    Set LocSheetRange = Worksheets("Locations").Range(LocRowStart, LocColEnd) 
    Set LocationsVariant = LocSheetRange 


    ' Verify the range address of the variant 
    ' Debug.Print LocSheetRange.Address 

    For i = LBound(LocationsVariant) To UBound(LocationsVariant) 
     Debug.Print LocationsVariant(i, 1) 
    Next i 

    ' Let's try to iterate through variant for a sec 
    ' Debug.Print LocationsVariant(1, 1) 
    ' Debug.Print LocationsVariant(2, 1) 


End Sub 
+0

Sie haben keinen Wert für 'LocationsVariant' festgelegt. Wolltest du dem Wert eines Bereichs einen Wert zuweisen? –

+0

@TimWilliams Ich habe gerade diese Zeile bearbeitet und hinzugefügt. Es war dort in meinem Code aber versehentlich in der Post gelöscht. Wenn ich also mit lbound()/ubound() auf die Zeile trete, stoße ich auf einen Typ-Mismatch-Fehler. – ccdrm

+4

Verwenden Sie 'Set' nicht, wenn Sie den Wert zuweisen, wenn Sie ein 2D-Array erhalten möchten. Andernfalls erstellen Sie eine andere Range-type Variable –

Antwort

0

Sie setzen LocColEnd entspricht einem Bereich und übergibt ihn dann als Argument der Spaltennummer an die Bereichsfunktion in der nächsten Zeile. Das Argument der Spaltennummer muss jedoch eine ganze Zahl sein.

Set LocColEnd = Worksheets("Locations").Cells(LocRowEnd.row, EndColInt) 
Set LocSheetRange = Worksheets("Locations").Range(LocRowStart, LocColEnd) 

Sie haben einige Möglichkeiten, dies zu korrigieren. Am besten wäre es wohl nur EndColInt als Spaltennummer Argument wie folgt:

Set LocSheetRange = Worksheets("Locations").Range(LocRowStart, EndColInt) 

Diese Linie auch verdächtig aussieht. Ich würde empfehlen, die Row-Eigenschaft an das Ende wie folgt anzuhängen:

LocRowEnd = Worksheets("Locations").Cells(Rows.Count, LocRowStart.Column).End(xlUp).Row 
+0

Der obige Code wurde bearbeitet, um das Schlüsselwort Set in der letzten Zeile zu entfernen. –