한 워크시트에서 다른 워크시트로 가변 개수의 데이터 행(값 및 형식)을 복사하려고 합니다. 이를 위해 웹에서 한 번에 하나의 셀을 복사하는 일부 VBA 코드를 발견하고 성공적으로 수행했습니다.Copy_ValueFormat(cell1 As Range, cell2 As Range)
하지만 중첩된 For 루프 내에서 해당 코드를 호출하면 호출이 중단됩니다. 다음 오류가 발생하므로 호출에서 셀 참조의 형식을 올바르게 지정하지 않았습니다. [런타임 오류 '9': 아래 첨자가 범위를 벗어났습니다.]
내가 뭘 잘못하고 있는지 말해 줄 수 있는 사람이 있나요?
'THIS IS THE VBA I GOT OFF THE
'Copy Value and formats from one cell to another
Sub Copy_ValueFormat(cell1 As Range, cell2 As Range)
Dim sel As Range
Set sel = Selection
Application.ScreenUpdating = False
cell1.Copy
cell2.PasteSpecial Paste:=xlPasteFormats
cell1.Copy
cell2.PasteSpecial Paste:=xlPasteValues
sel.Activate
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
'THIS IS SOME TEST CODE THAT SUCCESSFULLY CALLS "Copy_ValueFormat(...)"
Sub TestCopy()
Call Copy_ValueFormat(Range("ONGOING!B2"), Range("BF2"))
End Sub
'THIS IS MY CODE THA CRASHES WHEN I MAKE THE CALL TO "Copy_ValueFormat(...)"
Sub TestForNext()
Dim i As Long
Dim j As Long
Sheets("JUNK").Select
Cells.ClearContents
For i = 1 To 10 'Row Counter
For j = 1 To 20 'Column Counter
Call Copy_ValueFormat(Sheets("ONGOING!").Cells(i, j), Sheets("JUNK").Cells(i, j))
Next j
Next i
End Sub
답변1
작업할 항목을 선택할 필요가 없으며 해당 항목으로 돌아가기 위해 현재 선택 항목을 수집하는 아이디어도 필요하지 않습니다. 호출은 Application.ScreenUpdating
화면을 깜박이는 역할만 합니다.
하위 프로시저를 실행하는 데 사용하는 기능이 Call
더 이상 사용되지 않습니다. 이것이 없으면 전달된 매개변수는 대괄호로 묶이지 않습니다.
원본 복사본 소스는 xlPasteFormats 이후에도 여전히 존재합니다. 다시 복사할 필요가 없습니다.
Sub Copy_ValueFormat(cell1 As Range, cell2 As Range)
cell1.Copy
cell2.PasteSpecial Paste:=xlPasteFormats
cell2.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End Sub
Sub TestForNext()
Dim i As Long, j As Long
'if you want to halt screen updating, this is where it should be
Application.ScreenUpdating = False
With Worksheets("JUNK")
.Cells.Clear '<~~ clear values and formats
For i = 1 To 10 'Row Counter
For j = 1 To 20 'Column Counter
Copy_ValueFormat Worksheets("ONGOING!").Cells(i, j), .Cells(i, j)
Next j
Next i
End With
Application.ScreenUpdating = True
End Sub