Копировать / Вставить значение между различными книгами - PullRequest
1 голос
/ 02 июля 2019

Я хочу использовать VBA, чтобы скопировать диапазон данных из одной рабочей книги и вставить ее в другую рабочую книгу. Чтобы узнать, куда вставить информацию, я ищу следующую пустую строку.

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

Sub Button1_Click()
   Dim wb1 As Workbook
   Dim sht As Worksheet
   Dim rng As Range
   Dim databasewb As Workbook
   Dim databasesht As Worksheet
   Dim eRow As Integer

    'set workbooks to variables

    Set databasewb = Workbooks("Aged Debt Data V1.xlsm")

    Set wb1 = Workbooks.Open("C:\Users\roanderson\Desktop\Aged debt\Templates\BIO Inc (IO) Template.xlsx")


    'select sheet where data lies

    Set sht = wb1.Sheets("Conversion to aged debt format")
    sht.Activate

    'copy range on sheet

    Set rng = sht.Range("A2", Range("A2").End(xlDown).End(xlToRight))
    rng.Copy


    ' paste range into database

     'activate database workbook
    databasewb.Activate

    'find next empty row
    eRow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
    MsgBox (eRow)

    'paste values into empty row
    Sheet1.Cells(eRow, 1).Select
    rng.PasteSpecial Paste:=xlPasteValues
    wb1.Close

End Sub

Данные для вставки в рабочую книгу Datebase,

Ответы [ 2 ]

1 голос
/ 02 июля 2019

По возможности старайтесь не использовать Copy Paste с VBA, а также избегайте выбора . Поскольку вы просто хотите копировать значения, использование подхода VBA Value, вероятно, будет проще. Измените строку кода, куда вы пытаетесь вставить специальное значение для установки значения. Смотри ниже

'paste values into empty row
Sheet1.Cells(eRow, 1).Resize(RNG.Rows.Count, RNG.Columns.Count).Value = RNG.Value
wb1.Close

Что это делает, начиная с Cells (erow, 1), код использует Resize, чтобы установить начальный диапазон равным количеству строк и столбцов или вашей переменной RNG. Тогда это просто установка значений, тот же результат, что и у CopyPasteValue, только с меньшими накладными расходами.

Однако, если вы хотите сохранить подход «копировать вставку», измените код следующим образом:

'paste values into empty row
Sheet1.Cells(eRow, 1).PasteSpecial Paste:=xlPasteValues
wb1.Close
0 голосов
/ 02 июля 2019

Изменить rng.pastespecial на selection.pastespecial

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