Mis datos se ven así, muy, muy largos verticalmente.
#1, name1, number1
#2, name2, number2
#3, name3, number3
...
#2000, name2000, number2000
Quiero reformatear en 2 o 3 conjuntos de columnas que se ajusten a cada página de impresión. Algo como esto
#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
etcétera.
Nunca antes había escrito códigos VB, pero estoy intentando ajustar algún código existente que encontré para hacer esto y me encuentro con un error. Conté las filas que necesito para cada página y el número es 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
Subtítulo final
Esta línea de aquí sigue dándome el error 1004 y el mensaje de error no me da ninguna pista :(
Cells(desRow, x) = rng.Cells(srcRow, srcColumn)
He leído algunas respuestas aquí con una forma posiblemente mejor de hacer esto copiando el rango en lugar de realizar un bucle como lo hice yo, pero no tengo tiempo para estudiar porque necesito hacerlo lo antes posible y agradecería que alguien pudiera ayudarme a investigar esto. .
Muchas gracias.
Respuesta1
Los errores 1004 generalmente se deben a hacer referencia a un objeto (fila, celda, columna, rango, etc.) que no existe (en ese momento).
Para comenzar a diagnosticar, coloque un punto de interrupción en la línea que le está dando el error, luego revise los valores (a través de Relojes) para desRow, srcColumn, srcRow, rng y count. Compruébelos en cada iteración del ciclo y asegúrese de que hagan referencia a objetos válidos (que realmente existan en ese momento).
Respuesta2
Esto permitirá insertar saltos de página a lo largo de columnas para páginas que solo tengan 36 filas. Esto significa que tendrá 72 entradas de 3 columnas 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