Ho un codice esistente che sto modificando. Questo codice crea una raccolta di righe da tabelle di fogli di lavoro preesistenti. Crea una grande raccolta bidimensionale, con informazioni distinte in ogni colonna. Esiste un modulo di classe separato che dichiara il tipo di dati per ciascuna colonna.Come scrivere una raccolta VBA su un foglio Excel
Il codice scrive la raccolta 2-D in un nuovo foglio facendo scorrere a turno ciascuna voce. Non ho mai usato una collezione prima e vorrei scrivere la raccolta sul foglio in un solo passaggio. Il codice corrente impiega molto tempo quando la tabella ha molti record.
C'è un modo per convertire l'intera raccolta in un array 2-D, o in modo che io possa quindi scrivere l'array 2-D in un unico passaggio? O c'è un modo per scrivere l'intera collezione sul foglio, proprio come con un array 2-D? Ho provato a cercare questo e fino ad ora non ho avuto successo. Qualsiasi punto generale sarebbe apprezzato!
Ecco alcuni esempi di codice, con commenti in grassetto, per illustrare come viene utilizzata la raccolta.
Definire il modulo di classe, come il nome TableEntry
Public Item1 As String
Public Item2 As String
Public Item3 As String
Public Item4 As Integer
Public Item5 As Integer
principale Routine - creare la collezione, Riempire la Collezione, Scrivi Collection Foglio
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)
Sub Routine 1 - Riempi la collezione
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
Sub Routine 2 - Scrivi Collection Foglio
Grazie stracci. Avrei dovuto trovarlo anch'io – psychonomics
La risposta nel link qui sopra utilizza una matrice invece di una raccolta. È questo che dovrei fare, o c'è un modo per trasferire una collezione a un array, o addirittura scrivere una collezione in un unico passaggio? – psychonomics
In realtà, se si disattiva l'aggiornamento e i calcoli dello schermo, sarà abbastanza veloce, anche se si utilizza un ciclo. – martin