Как уже упоминалось в комментариях, вам нужно удалить On Error Resume Next
, потому что это предотвращает появление сообщения об ошибке.
Вы также не можете использовать Workbook.Worksheet.Selection
, эта равнина не существует.
Итак, если у вас есть макрос в целевой книге, ваша функция может (но не должна!) Выглядеть так:
Private Sub PasteCorrection()
Selection.Copy
ThisWorkbook.Worksheets(1).Range("C7").Select
ActiveSheet.Paste
End Sub
Нет, это не должно выглядеть так, потому что, как сказал другой комментатор, вам следует избегать выборов в максимально возможной степени. Приведенная ниже функция будет выполнять то же самое, но гораздо быстрее и без попадания в буфер обмена.
Private Sub PasteCorrection()
ThisWorkbook.Worksheets(1).Range("C7").Value = Selection.Value
End Sub
Еще лучше, если вы знаете, что диапазоны совпадают, вы можете использовать следующее:
Private Sub PasteCorrection()
ThisWorkbook.Worksheets(1).Range("C7").Value = Workbooks(2).Worksheets(1).range("C7").Value
End Sub
Вы, конечно, должны адаптировать "C7" для соответствия вашим конкретным потребностям.
UPDATE
Если макрос находится внутри VBA рабочей книги-источника, тогда код должен быть другим. Предполагая, что вы знаете имя файла целевой книги.
Private Sub PasteCorrection()
Selection.Copy
Workbooks("FileNameWithoutExtension").Worksheets(1).Paste
End Sub
Если вы не знаете название пункта назначения, НО у вас открыто только две рабочие книги:
Private Sub PasteCorrection()
Selection.Copy
If ThisWorkbook Is Workbooks(1) Then
Workbooks(2).Worksheets(1).Paste
else
Workbooks(1).Worksheets(1).Paste
End If
End Sub