Mam istniejący kod, który modyfikuję. Ten kod tworzy kolekcję wierszy z istniejących tabel arkusza roboczego. Tworzy dużą kolekcję 2-D, z odrębnymi informacjami w każdej kolumnie. Istnieje oddzielny moduł klasy, który deklaruje typ danych dla każdej kolumny.Jak napisać kolekcję VBA do arkusza Excela
Kod zapisuje kolekcję 2-D do nowego arkusza, przechodząc kolejno przez każdy element. Nigdy wcześniej nie korzystałem z kolekcji i chciałbym zapisać kolekcję na arkuszu w jednym przebiegu. Obecny kod zajmuje dużo czasu, gdy tabela zawiera wiele rekordów.
Czy istnieje sposób przekonwertowania całej kolekcji na tablicę 2D, czy też mogę napisać tablicę 2-D za jednym razem? Czy istnieje sposób na zapisanie całej kolekcji do arkusza, tak jak w przypadku macierzy 2D? Próbowałem tego szukać i jak dotąd nie udało się. Wszelkie ogólne punkty będą mile widziane!
Oto przykładowy kod, z wyróżnionymi pogrubioną czcionką, aby zilustrować, w jaki sposób kolekcja jest używana.
Zdefiniuj moduł klasy, nazwany jako TableEntry
Public Item1 As String
Public Item2 As String
Public Item3 As String
Public Item4 As Integer
Public Item5 As Integer
Main Routine - Tworzenie Collection, Napełnij kolekcja, pisać Collection do Arkusza
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)
podprogram 1 - Wypełnij kolekcję
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
podprogram 2 - Napisz Collection do Arkusza
Dzięki szmaty. Powinienem był to znaleźć. – psychonomics
Odpowiedź w powyższym łączu używa tablicy zamiast kolekcji. Czy to właśnie powinienem robić, czy istnieje sposób na przeniesienie kolekcji do tablicy, czy też napisanie kolekcji w jednym przejściu? – psychonomics
W rzeczywistości, po wyłączeniu aktualizacji ekranu i obliczeń, będzie wystarczająco szybki, nawet jeśli użyjesz pętli. – martin