Как исправить эту проблему копирования и вставки между книгами в VBA? - PullRequest
1 голос
/ 12 апреля 2019

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

Я пытаюсь очень просто скопировать и вставить диапазон данных из последней строки данных из листа из одной рабочей книги в следующую пустую строку в листе из другой рабочей книги (скриншоты таблиц представлены ниже). Затем это повторяется для нескольких листов, где имена листов совпадают в обеих книгах (надеюсь, код имеет больше смысла, чем это объяснение). Код был немного адаптирован, поскольку я использую его для многих немного разных таблиц и сценариев, но для той же цели.

Sub Hellotheregeneralkenobi()

    Dim wb1 As Workbook
    Dim wb2 As Workbook
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet

    Set wb1 = Workbooks("CallArrivals.xlsm")
    Set wb2 = ActiveWorkbook
    Set ws1 = wb1.Sheets("Online")
    Set ws2 = wb2.Sheets("Online")

             'Last_Row1 = ws1.Range("D" & Rows.Count).End(xlUp).Row
    Last_Row2 = ws2.Range("C" & Rows.Count).End(xlUp).Row + 1

    ws1.Range("d26:L26").Copy
    ws2.Range("C" & Last_Row2).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

End Sub

Однако, когда я выполняю этот макрос для первого времени и только на самом первом листе (в этом примере он называется «Online»), он вставляет неправильный выбор данных (см. Скриншот таблицы ошибок ниже). Но когда я вручную удаляю эти вставленные данные и снова запускаю код, все работает отлично, и правильные данные копируются (как показано на скриншотах таблицы.

Что здесь происходит? Я на 100% уверен, что я просто глуп и пропускаю что-то невероятно простое К сожалению, я единственный из моей команды, кто вообще имеет опыт программирования (SQL).

Таблица с ошибкой:

Screenshot showing the error

Таблица, показывающая его работу после выполнения во второй раз:

enter image description here

Таблица, показывающая, откуда оно копируется:

enter image description here

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

Редактировать: снимок экрана с таблицей, отображающей скопированные данные Редактировать: снимок экрана с таблицей, на которой отображаются скопированные данные

1 Ответ

0 голосов
/ 12 апреля 2019

Ссылка на мои комментарии и комментарии MasterWu - это должно работать для вас (не проверено)

Sub Hellotheregeneralkenobi()

    Dim wb1 As Workbook, wb2 As Workbook
    Dim ws1 As Worksheet, ws2 As Worksheet

    Set wb1 = Workbooks("CallArrivals.xlsm")
    Set wb2 = Workbooks("") 'The name of your workbook you are copying to - maybe use sourceWB and destWB instead of wb1 and wb2
    Set ws1 = wb1.Sheets("Online")
    Set ws2 = wb2.Sheets("Online")

             'Last_Row1 = ws1.Range("D" & Rows.Count).End(xlUp).Row
    Last_Row2 = ws2.Range("C" & Rows.Count).End(xlUp).Row + 1

    ws1.Range("d26:L26").Copy _
        Destination:=ws2.Range("C" & Last_Row2)

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...