VBA - Neuformatierung einer 3-Spalte in 9

VBA - Neuformatierung einer 3-Spalte in 9

Meine Daten sehen ungefähr so ​​aus, vertikal sehr, sehr lang.

#1, name1, number1
#2, name2, number2
#3, name3, number3
...
#2000, name2000, number2000

Ich möchte in 2 oder 3 Spaltensätze umformatieren, die auf jede Druckseite passen. So etwas wie das hier

#1, name1, number1    #5    #9
#2, name2, number2    #6    #10
#3, name3, number3    #7    #11
#4, name4, number4    #8    #12
end of page 1
#13    #17   #21
#14    #18   #22
#15    #19   #23
#16    #20   #24

und so weiter.

Ich habe noch nie VB-Codes geschrieben, aber ich versuche, vorhandenen Code, den ich gefunden habe, anzupassen, um dies zu tun, und stoße dabei auf einen Fehler. Ich habe die Zeilen gezählt, die ich für jede Seite brauche, und die Zahl ist 36.

Sub joeycol()
Dim count As Integer
count = 1

Dim desRow As Long
desRow = 1
Dim desColumn As Long
desColumn = 1

Dim srcRow As Long
Dim endRow As Long
endRow = 577

Dim srcColumn As Long

Dim wks As Worksheet
Set wks = Worksheets.Add

Dim x As Long

For srcRow = 1 To endRow
    If count = 4 Then
        count = 1
        desRow = desRow - 36
    End If

    For srcColumn = 1 To 3
        x = srcColumn * count
        Cells(desRow, x) = rng.Cells(srcRow, srcColumn)
    Next
    count = count + 1
    desRow = desRow + 1
Next

End Sub

Diese Zeile hier gibt mir ständig den Fehler 1004 und die Fehlermeldung gibt mir keinen Hinweis :(

Cells(desRow, x) = rng.Cells(srcRow, srcColumn)

Ich habe hier einige Antworten gelesen, in denen es möglicherweise eine bessere Möglichkeit gab, den Bereich zu kopieren, anstatt wie ich eine Schleife zu verwenden. Ich habe aber keine Zeit zum Lernen, weil ich dies so schnell wie möglich erledigen muss, und wäre dankbar, wenn mir jemand dabei helfen könnte.

Vielen Dank.

Antwort1

1004-Fehler entstehen normalerweise durch die Referenzierung eines Objekts (Zeile, Zelle, Spalte, Bereich usw.), das (zu diesem Zeitpunkt) nicht existiert.

Um mit der Diagnose zu beginnen, setzen Sie einen Haltepunkt in die Zeile, die den Fehler verursacht, und überprüfen Sie dann schrittweise (über Watches) die Werte für desRow, srcColumn, srcRow, rng und count. Überprüfen Sie sie bei jeder Iteration der Schleife und stellen Sie sicher, dass sie auf gültige Objekte verweisen (die zu diesem Zeitpunkt tatsächlich vorhanden sind).

Antwort2

Dadurch werden Seitenumbrüche entlang von Spalten für Seiten eingefügt, die nur 36 Zeilen lang sind. Das bedeutet, dass pro Seite 72 Einträge mit jeweils 3 Spalten vorhanden sind.

Sub test()
Dim wsOriginal As Worksheet
Set wsOriginal = ActiveSheet
Dim wsDest As Worksheet
Set wsDest = Worksheets.Add

Dim lastrow As Integer
lastrow = wsOriginal.Cells(Rows.count, "a").End(xlUp).Row
Dim numSections As Integer
numSections = lastrow / 36
Dim i As Integer
Dim j As Integer
Dim k As Integer
k = 0

For i = 1 To lastrow
    If i > 36 * (k + 1) Then
        k = k + 1
    End If
    For j = 1 To 3
        wsDest.Cells((i - (36 * k)), j + (k * 4)) = wsOriginal.Cells(i, j)
    Next
Next

Dim lastCol As Integer
lastCol = wsDest.Cells(1, Columns.count).End(xlToLeft).Column
Dim numPages As Integer
numPages = lastCol / 8

For Z = 1 To numPages
    wsDest.Columns(8 * Z).PageBreak = xlPageBreakManual

Next

End Sub

verwandte Informationen