Передача ячеек диапазона для копирования и вставки: 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 как отформатированное значение и число.

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

Помните, что вам всегда нужно указывать рабочую книгу и рабочий лист для каждого объекта диапазона.

Tim Stack 28.05.2019 14:18
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
2
1
43
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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
Ответ принят как подходящий

Поскольку 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

Другие вопросы по теме