다른 매크로 호출에서 셀 참조 만들기

다른 매크로 호출에서 셀 참조 만들기

한 워크시트에서 다른 워크시트로 가변 개수의 데이터 행(값 및 형식)을 복사하려고 합니다. 이를 위해 웹에서 한 번에 하나의 셀을 복사하는 일부 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

관련 정보