내 데이터는 수직으로 매우 긴 형태로 보입니다.
#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
서브 끝
바로 여기에 있는 이 줄은 계속 오류 1004를 발생시키며 오류 메시지는 나에게 어떤 단서도 제공하지 않습니다.
Cells(desRow, x) = rng.Cells(srcRow, srcColumn)
내가 했던 것처럼 반복하는 대신 범위를 복사하여 이 작업을 수행하는 더 나은 방법에 대한 답변을 여기에서 읽었지만 최대한 빨리 완료해야 하기 때문에 공부할 시간이 없으며 누구든지 이 문제를 조사하는 데 도움을 주시면 감사하겠습니다. .
매우 감사합니다.
답변1
1004 오류는 일반적으로 해당 시점에 존재하지 않는 개체(행, 셀, 열, 범위 등)를 참조하기 때문에 발생합니다.
진단을 시작하려면 오류가 발생한 줄에 중단점을 놓은 다음 (Watch를 통해) desRow, srcColumn, srcRow, rng 및 count에 대한 값을 확인하는 단계를 진행하세요. 루프가 반복될 때마다 이를 확인하고 유효한 객체(그 당시 실제로 존재했던 객체)를 참조하고 있는지 확인하십시오.
답변2
이렇게 하면 행 길이가 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