別のマクロの呼び出しでセル参照を作成する

別のマクロの呼び出しでセル参照を作成する

あるワークシートから別のワークシートに、可変数のデータ行(値と形式)をコピーしようとしています。これを実行するには、一度に 1 つのセルをコピーする VBA コードを Web で見つけ、成功しました。Copy_ValueFormat(cell1 As Range, cell2 As Range)

しかし、ネストされた For ループ内からそのコードを呼び出すと、Call がクラッシュします。次のエラーが表示されるので、Call 内のセル参照を正しくフォーマットしていないことは明らかです: [実行時エラー '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

関連情報