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