VBA - reformatando uma coluna 3 em 9

VBA - reformatando uma coluna 3 em 9

Meus dados são mais ou menos assim, muito longos verticalmente.

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

Quero reformatar em 2 ou 3 conjuntos de colunas ajustadas em cada página de impressão. Algo assim

#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

e assim por diante.

Nunca escrevi códigos VB antes, mas estou tentando ajustar alguns códigos existentes que encontrei para fazer isso e estou encontrando um erro. Contei as linhas necessárias para cada página e o número é 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

Finalizar sub

Esta linha aqui continua me dando o erro 1004 e a mensagem de erro não está me dando nenhuma pista :(

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

Eu li algumas respostas aqui com uma maneira possivelmente melhor de fazer isso, copiando o intervalo em vez de fazer um loop como fiz, mas não tenho tempo para estudar, pois preciso fazer isso o mais rápido possível e agradeceria se alguém pudesse me ajudar a investigar isso .

Muito obrigado.

Responder1

Os erros 1004 geralmente ocorrem devido à referência a um objeto (linha, célula, coluna, intervalo, etc.) que não existe (naquele momento).

Para começar a diagnosticar, coloque um ponto de interrupção na linha que está apresentando o erro e, em seguida, verifique os valores (por meio de relógios) para desRow, srcColumn, srcRow, rng e count. Verifique-os a cada iteração do loop e certifique-se de que estejam fazendo referência a objetos válidos (que realmente existem naquele momento).

Responder2

Isso fará com que você insira quebras de página ao longo das colunas para páginas com apenas 36 linhas. Isso significa que terá 72 entradas de 3 colunas por página.

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

informação relacionada