3

Мои данные выглядят примерно так, очень и очень долго по вертикали.

#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

End Sub

Эта строка прямо сейчас дает мне ошибку 1004, а сообщение об ошибке не дает мне никакой подсказки :(

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

Я прочитал некоторые ответы здесь, возможно, лучший способ сделать это, скопировав диапазон вместо цикла, как я сделал, но у меня нет времени для изучения, так как мне нужно сделать это как можно скорее, и был бы признателен, если кто-нибудь может помочь мне разобраться в этом ,

Большое спасибо.

2 ответа2

0

Ошибки 1004 обычно возникают из-за ссылки на объект (строка, ячейка, столбец, диапазон и т.д.), Который не существует (на данный момент).

Чтобы начать диагностику, поставьте точку останова на строке, сообщающей об ошибке, затем выполните проверку значений (с помощью Watches) для desRow, srcColumn, srcRow, rng и count. Проверяйте их на каждой итерации цикла и убедитесь, что они ссылаются на действительные объекты (которые на самом деле существуют в то время).

0

Это будет делать вставку разрывов страниц по столбцам для страниц длиной всего 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .