Как исправить ошибку во время выполнения 1004, когда я вставляю с VBA - PullRequest
3 голосов
/ 10 июля 2019

Я довольно новичок в VBA, так что это может быть немного базовым.У меня есть макрос, который копирует диапазон ячеек из листа «Рабочий лист» и вставляет их в активную строку в листе «FCTC».Макрос также вставляет новые строки, чтобы новая вставленная информация не записывалась поверх существующих данных.Я думаю, что моя проблема заключается в копировании диапазона в активную вставку ссылки на ячейку, но я не уверен.Я разместил код ниже.Любая помощь будет принята с благодарностью.

`Private Sub CommandButton1_Click()
Application.Goto ActiveWorkbook.Sheets("Working Sheet").Range("A1:AQ7")
    Selection.Copy
    Sheets("FCTC").Select
    ActiveCell.Offset(0, 7).EntireRow.Insert
    ActiveCell.Paste
End Sub

Макрос действительно работает, вставляет необходимые данные и перемещает строки вниз по желанию.Однако я получаю

ошибка времени выполнения 1004 «Сбой метода PasteSpecial класса Range»

Ясно, что есть проблема со структурой, но я не смогрешить это.

Before I run the Macro

After the macro with the new error message

1 Ответ

0 голосов
/ 11 июля 2019
  1. Не использовать .Select или .Activate ( Как избежать использования Select в Excel VBA ).
  2. Дайте красной ячейке имя, например PasteBeforeHere. Таким образом, пользователю не нужно выбирать эту ячейку вручную. Если вы используете именованные диапазоны, вы можете легко получить доступ к ячейке с помощью Range("PasteBeforeHere").
  3. Затем вставьте пустые строки перед копированием / вставкой.

Должно работать что-то вроде следующего:

Option Explicit

Private Sub CommandButton1_Click()
    Dim Source As Range
    Set Source = ThisWorkbook.Worksheets("Working Sheet").Range("A1:AQ7")

    Dim InsertBefore As Range
    Set InsertBefore = Selection 'better ThisWorkbook.Worksheets("FCTC").Range("PasteBeforeHere")
    Set InsertBefore = ThisWorkbook.Worksheets("FCTC").Range("PasteBeforeHere")

    'insert empty rows (same amount as source has)
    Application.CutCopyMode = False
    InsertBefore.Resize(RowSize:=Source.Rows.Count).EntireRow.Insert

    'copy from source to destination
    Source.Copy Destination:=InsertBefore.Offset(RowOffset:=-Source.Rows.Count)
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...