Wie schreibe ich eine VBA-Sammlung in eine Excel-Tabelle? [Duplizieren]

Diese Frage hat hier bereits eine Antwort:

Kopieren Sie die Werte einer Sammlung in ein 2D-Array in VBA 1 Antwort

Ich habe einen vorhandenen Code, den ich ändere. Dieser Code erstellt eine Auflistung von Zeilen aus bereits vorhandenen Arbeitsblatttabellen. Es wird eine große 2D-Sammlung mit unterschiedlichen Informationen in jeder Spalte erstellt. Es gibt ein separates Klassenmodul, das den Datentyp für jede Spalte deklariert.

Der Code schreibt die 2D-Sammlung auf ein neues Blatt, indem er nacheinander die einzelnen Elemente durchläuft. Ich habe noch nie eine Sammlung verwendet und möchte die Sammlung in einem Durchgang auf das Blatt schreiben. Der aktuelle Code dauert ziemlich lange, wenn die Tabelle viele Datensätze enthält.

Gibt es eine Möglichkeit, die gesamte Sammlung in ein 2D-Array zu konvertieren, oder kann ich das 2D-Array dann auf einmal schreiben? Oder gibt es eine Möglichkeit, die gesamte Sammlung auf das Blatt zu schreiben, genau wie bei einem 2-D-Array? Ich habe versucht, danach zu suchen und war bisher erfolglos. Alle allgemeinen Punkte wäre dankbar!

Hier ist ein Beispielcode mit fett gedruckten Kommentaren, um zu veranschaulichen, wie die Sammlung verwendet wird.

Definieren Sie das Klassenmodul mit dem Namen TableEntry

Public Item1 As String
Public Item2 As String
Public Item3 As String
Public Item4 As Integer
Public Item5 As Integer

Hauptroutine - Sammlung erstellen, Sammlung füllen, Sammlung auf Blatt schreiben

Sub MainRoutine()

Dim table As Collection
Set table = New Collection

Call FillCollection(File As String, ByRef table As Collection)

Call WriteCollectionToSheet(ByRef table As Collection)

Unterroutine 1 - Füllen Sie die Sammlung

Dim wb As Workbook
Set wb = Workbooks.Open(File)

Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets

Dim R As Range
Set R = ws.Range("A2")

  Dim e As TableEntry
  For i = 1 To 20

    Set e = New TableEntry

    e.Item1 = R.Offset(i + 1, 0).Offset(0, 0)
    e.Item2 = R.Offset(i + 1, 0).Offset(0, 1)
    e.Item3 = R.Offset(i + 1, 0).Offset(0, 2)
    e.Item4 = R.Offset(i + 1, 0).Offset(0, 3)
    e.Item5 = R.Offset(i + 1, 0).Offset(0, 4)

    table.Add e

  Next i

Next ws

Unterroutine 2 - Sammlung auf Blatt schreiben

Antworten auf die Frage(2)

Ihre Antwort auf die Frage