通过范围单元格进行复制粘贴:Excel VBA

时间:2019-05-28 12:08:20

标签: excel vba

我必须将2个单元格(引用或值)从一个子传递到另一个子,以便将第一个单元格中的值复制并粘贴到另一个单元格。 由于需要多个单元格组合,因此我想通过将单元格(引用或值)从一个子例程传递到另一个子例程来完成它。

我尝试了以下代码,并将其与Byref和ByVal选项结合使用。但是无法获得预期的结果。 本质上,在下面的代码中,单元格E1792中存在的任何值都应以“值”和“数字”格式复制粘贴到C1799。

Private Sub Copy_Val(ByRef CopyFrom As Range, ByRef PasteTo As Range)
Application.ScreenUpdating = False

    Range(CopyFrom).Select
    Selection.Copy
    Range(PasteTo).Select

    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False

End Sub

Sub Apply_Filter()
    Dim CpFrm As Range
    Dim PstTo As Range
    Set CpFrm = Range("E1792")
    Set PstTo = Range("C1799")
    Call Copy_Val(CpFrm, PstTo)
End Sub

有时我会遇到Type Mismatch错误,有时会出现“ 400”错误。 预期的输出是,应将E1792单元格中存在的单元格值以“值”和“数字”格式复制粘贴到C1799。

在解决此问题方面的任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

由于CopyFrom和PasteTo是Range对象,因此不需要使用Range()。您还可以消除Select部分,并大大简化您的功能:

Private Sub Copy_Val(ByRef CopyFrom As Range, ByRef PasteTo As Range)
Application.ScreenUpdating = False

    CopyFrom.Copy
    PasteTo.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False

End Sub

答案 1 :(得分:1)

您可以尝试:

Option Explicit

Public Sub Copy_Val(ByVal CopyFrom As Range, ByVal PasteTo As Range)

    Application.ScreenUpdating = False

        CopyFrom.Copy
        PasteTo.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
            xlNone, SkipBlanks:=False, Transpose:=False

    Application.ScreenUpdating = True

End Sub

Sub Apply_Filter()

    With ThisWorkbook.Sheets("Sheet1")

        Call Copy_Val(.Range("E1792"), .Range("C1799"))

    End With

End Sub