VBA: reformatear una columna de 3 a 9

VBA: reformatear una columna de 3 a 9

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

información relacionada