Мои данные выглядят примерно так: очень-очень длинные по вертикали.
#1, name1, number1
#2, name2, number2
#3, name3, number3
...
#2000, name2000, number2000
Я хочу переформатировать в 2 или 3 набора колонок, помещающихся на каждой печатной странице. Что-то вроде этого
#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
и так далее.
Я никогда раньше не писал коды VB, но я пытаюсь настроить существующий код, который я нашел, чтобы сделать это, и я сталкиваюсь с ошибкой. Я подсчитал строки, которые мне нужны для каждой страницы, и их число равно 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
Конец субтитра
Эта строка постоянно выдает мне ошибку 1004, и сообщение об ошибке не дает мне никакой подсказки :(
Cells(desRow, x) = rng.Cells(srcRow, srcColumn)
Я читал здесь несколько ответов с возможным лучшим способом сделать это путем копирования диапазона вместо циклического выполнения, как это сделал я, но у меня нет времени на изучение, поскольку мне нужно сделать это как можно скорее, и я был бы признателен, если бы кто-нибудь помог мне разобраться в этом.
Большое спасибо.
решение1
Ошибки 1004 обычно возникают из-за ссылки на объект (строку, ячейку, столбец, диапазон и т. д.), который не существует (на данный момент времени).
Чтобы начать диагностику, поставьте точку останова на строке, которая выдает ошибку, затем пройдите проверку значений (через Watches) для desRow, srcColumn, srcRow, rng и count. Проверяйте их на каждой итерации цикла и убедитесь, что они ссылаются на допустимые объекты (которые действительно существуют в это время).
решение2
Это позволит вставить разрывы страниц вдоль колонок для страниц, которые имеют длину всего 36 строк. Это означает, что на странице будет 72 записи по 3 колонки.
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