2016-08-12 2 views
2

Ich bin fast fertig mit der Tabelle, wo ich zwei Arrays verglichen und alles, was in einem Array und nicht in einem anderen Array wurde in ein drittes Array.Drucken Array von Long zu Zellen in VBA und Subskript außerhalb des Bereichs Fehler

Ich möchte dann die Werte in das Array Zellen in einem Blatt der Arbeitsmappe, aber ich bekomme einen Index außerhalb des Bereichs, obwohl das Array einen Wert im Debugger zeigt.

Hier ist die Schleife um das Array zu drucken:

If (Not MissingLoans) = -1 Then 
    ThisWorkbook.Sheets("Inputs and Results").Cells(PrintCell, 1) = "No Missing Loans Found on Roll-Up" 

Else 
    For i = 1 To (UBound(MissingLoans())) Step 1 
     *** ThisWorkbook.Sheets("Inputs and Results").Cells(PrintCell, 1).Value = MissingLoans(i) 

     PrintCell = PrintCell + 1 
    Next 
End If 

I Sternchen durch die Linie stellen, die mir die außerhalb des zulässigen Bereichs Fehler geben, aber MissingLoans (I) einen Wert anzeigt. Tatsächlich ist Missingloans (1) der einzige Wert im Array.

+1

Was ist der Wert von 'PrintCell' wenn es fehlschlägt? –

+0

11. Es beginnt bei Zelle A11 und arbeitet sich nach unten –

+0

Scheint wie das Arbeitsblatt mit dem Namen "Inputs and Results" 'existiert nicht. –

Antwort

0

Wenn nur ein Wert im Array vorhanden ist, sollten Sie darauf mit Missingloans(0) zugreifen, da Arrays 0-basiert sind.

Versuchen Sie, diese

For i = LBound(MissingLoans()) To (UBound(MissingLoans())) Step 1 
    ThisWorkbook.Sheets("Inputs and Results").Cells(PrintCell, 1).Value = MissingLoans(i) 
    PrintCell = PrintCell + 1 
Next 
+0

Die Daten werden bei 1 in das Array eingefügt. Ich habe sie in Option Base 1 geändert und den Lobound verwendet. Erhalte immer noch den Fehler. –

+0

Wenn die Schleife bei "1" startet, aber "Ubound" == 0, wird die Schleife nicht ausgeführt, daher kann das Array * nicht die Quelle dieses Fehlers sein. Mein Geld steht auf dem Namen des Arbeitsblatts. –

0

Anstatt das Array Looping, weisen Sie das Array direkt auf das Blatt:

Else 
    Dim myRange as Range 
    Set myRange = ThisWorkbook.Sheets("Inputs and Results").Cells(PrintCell, 1) 

    '## Assumes Option Base 0, if Option Base 1, remove the +1 
    myRange.Resize(Ubound(MissingLoans)+1).Value = Application.Transpose(MissingLoans) 

    Next 
End If 

Dieser Code auch einen Fehler erhöhen sollte, wenn das Arbeitsblatt Inputs and Results Namen existiert nicht in ThisWorkbook, die ich vermute, ist die wahre Ursache für Ihren Index außerhalb der Reichweite.

Hinweis: Ich würde einfach Option Base 0 verwenden, es ist die Standardeinstellung und am häufigsten durch eine Totale. Lerne einfach damit zu leben. Ich würde auch beginnen, das Array an Position 0, nicht 1 zu füllen. Aber wenn Sie darauf bestehen, Option Base 0und es von 1 ... zu füllen, dann müssten Sie die Iteration For i = 1 To UBound(MissingLoans) Schleife oder eine ReDim Preserve auf dem Array tun , von denen ich denke, dass es sinnlos ist zu komplizieren, was mit der direkten Anordnung> Bereichszuweisung, wie oben, einfacher gemacht werden kann.

Verwandte Themen