Array auf einmal Pasten
25.07.2024 11:15:00
Theo
mir ist das fast schon ein bisschen peinlich, obwohl ich schon seit Jahren mit VBA arbeite, habe ich bisher eigentlich nie mit Arrays arbeiten müssen und fühle mich deswegen in diesem Bereich noch etwas planlos.
In meinem gegenwärtigen Projekt liste ich mehr als eine Millionen Einträge auf, was beim klasssischen zellenweisen Schreiben einfach zu langsam ist. Ich hatte deshalb die "brilliante" Idee, die Einträge erst einmal in ein Array zu schreiben und dann das Array auf einmal in die Tabelle zu schreiben. Das funktioniert auch in meiner Anwendung relativ fix, allerdings stehen im Anschluss nicht die erwarteten Werte in der Tabelle. Obwohl jeder Eintrag des Arrays unterschiedliche Werte enthält, steht in meinem Ergebnis in jder Zeile immer nur der erste (Index =0) eintrag des Arrays. Untenstehender Code zeigt wie ich das befüllte Array zurückschreibe. Das Befüllen des Arrays ist hier nur exemplarisch. Laut Watchwindow ist es auf jeden Fall korrekt befüllt.
Was mache ich falsch:
Sub ArrayProblem()
Dim myArr() As Variant
Dim i As Long
Dim NoOfElementsInArray As Long
Dim ElemCount As Long
Dim ElemUBound As Long
'Dies simuliert wie das Array Befüllt wird
For i = 0 To 1000 ' Die Anzahl der Einträge ist variabel - zur veranschaulichung 1000
ElemCount = ElemCount + 1
If ElemCount > ElemUBound Then
ElemUBound = 2 * ElemCount
ReDim Preserve myArr(ElemUBound)
End If
myArr(i) = "testfile_" & i & ".pdf"
Next i
'jetzt ist das array also folgendermassen befüllt:
'myArr(0)= "testfile_0.pdf"
'myArr(1)= "testfile_1.pdf"
'myArr(2)= "testfile_2.pdf"
'...
'myArr(1000)= "testfile_1000.pdf"
'Ermittel die Größe des Arrayss
NoOfElementsInArray = UBound(myArr)
'Zurückschreiben in Zelle B17 des activesheet
ActiveSheet.Range("B17:B" & 17 + NoOfElementsInArray) = myArr
'erwartet sollten jetzt folgende Werte in den Zellen stehen
'B17: testfile_0.pdf
'B18: testfile_1.pdf
'B19: testfile_2.pdf....
'tatsächlich steht da jetzt aber:
'B17: testfile_0.pdf
'B18: testfile_0.pdf
'B19: testfile_0.pdf....
End Sub
Danke schon mal für Eure Hilfe!
Theo
Anzeige