Проходные ячейки диапазона для копирования-вставки: Excel VBA - PullRequest
2 голосов
/ 28 мая 2019

Мне нужно передать 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

Иногда я получаю сообщение об ошибке несоответствия типов, а иногда - 400. Ожидаемый результат - значение ячейки, присутствующее в ячейке E1792, должно быть скопировано в C1799 в формате «Значение и число».

Любая помощь в исправлении этого будет оценена.

Ответы [ 2 ]

3 голосов
/ 28 мая 2019

Поскольку 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 голос
/ 28 мая 2019

Вы можете попробовать:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...