Мне нужно передать 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 как отформатированное значение и число.
Любая помощь в исправлении этого будет оценена.
Вы можете попробовать:
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
Помните, что вам всегда нужно указывать рабочую книгу и рабочий лист для каждого объекта диапазона.