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