Не удается скопировать выбор из другой книги - PullRequest
0 голосов
/ 13 ноября 2018

Я безуспешно пытался скопировать данные из другой книги в том же экземпляре Excel. Мне нужно скопировать выбор, сделанный мной в другой открытой книге, и вставить его в активную книгу. Оказывается, что когда я запускаю код VBA, выбранная копия теряется (исчезают марширующие муравьи).

Я пробовал приведенный ниже код и варианты, но он никогда не работает.

Private Sub PasteCorrection()

    On Error Resume Next
    Workbooks(2).Worksheets(1).Selection.Copy ThisWorkbook.Worksheets(1).Range("C7")
    ActiveSheet.PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:=False, NoHTMLFormatting:=True
    ActiveSheet.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

End Sub

Заранее спасибо!

1 Ответ

0 голосов
/ 13 ноября 2018

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