VBA - скопировать-вставить в другую книгу

Я пытаюсь скопировать определенные ячейки из одной книги в другую в конце таблицы. Я предполагаю, что проблема заключается в частом использовании ActiveWorkbook. Я получаю сообщение об ошибке «Объект не поддерживает это свойство или метод», и кажется, что макрос копирует ячейки из CurrentBook, а не из загрузчика.

Как я могу исправить свой код?


Dim uploadfile As Variant
Dim uploader As Workbook
Dim CurrentBook As Workbook
Dim lastRow As Integer

Set CurrentBook = ActiveWorkbook

uploadfile = Application.GetOpenFilename()
    If uploadfile = "False" Then
        Exit Sub
    End If
Workbooks.Open uploadfile

Set uploader = ActiveWorkbook

With uploader
    Application.CutCopyMode = False
    Range("A1:J100").Copy
End With


CurrentBook.Activate
lastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row + 1
Range("A" & lastRow & ":J" & lastRow + 100).Select
Selection.Paste

uploader.Close

End Sub

Этот сообщение может решить ваши проблемы. Вам необходимо объявить рабочие листы и рабочие книги и сослаться на них.

Damian 30.05.2019 11:44

С какой конкретной проблемой вы столкнулись?

AAA 30.05.2019 11:45

Вы можете использовать ThisWorkbook для ссылки на книгу, в которой используется код VBA. И если я правильно помню, вы можете сделать Set uploader = Workbooks.Open uploadfile, но я сейчас сижу на своем телефоне, поэтому я не могу это проверить.

Andreas 30.05.2019 11:55
Я получаю сообщение об ошибке "Объект не поддерживает это свойство или метод" на какой строке?
Andreas 30.05.2019 11:58

@Andreas Set uploader = Workbooks. Open uploadfile, к сожалению, не работает Ошибка «Ожидаемый конец оператора»

Marysia 30.05.2019 12:02
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
5
254
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Здесь, и только потому, что мне скучно на работе, тысячи таких постов:

Option Explicit
Sub CopyPaste()

    Dim uploadfile As String 'not Variant, the filename will be a string
    Dim wbCopy As Workbook 'Better than uploader As Workbook you need to declare variables easy to read
    Dim wbPaste As Workbook 'same as above
    Dim LastRow As Lon 'integer doesn't work (it will be a long delimited to integer) either Byte(0-255) or Long

    Set wbPaste = ThisWorkbook 'the workbook containing the code

    uploadfile = Application.GetOpenFilename()
    If uploadfile = "False" Then
        Exit Sub
    End If

    Set wbCopy = Workbooks.Open(uploadfile) 'declare your paste workbook like this

    ' Set uploader = ActiveWorkbook this way of referencing a workbook might give you errors, use the above

    With wbCopy.Sheets("MySheetName") 'reference always the worksheets, change MySheetName for the actual sheet name
        'Application.CutCopyMode = False this is useless here it's emptying the clipboard but below you copy something new
        .Range("A1:J100").Copy 'you missed the . on the beginning (when using With you need to use the dot to reference the with)
    End With

    With wbPaste.Sheets("MySheetName") 'reference always the worksheets, change MySheetName for the actual sheet name
        LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
        .Range("A" & LastRow).PasteSpecial xlPasteValues 'when you copy/paste you just need to find the first cell on the paste range, Excel will paste the whole range
    End With

    Application.CutCopyMode = False 'now you can use this to avoid warning message on closing the copy workbook
    wbCopy.Close Savechanges:=False

End Sub

Спасибо за код, Дамиан, но он копирует таблицу из wbPaste(ThisWorkbook)

Marysia 30.05.2019 12:21

И я все еще получаю сообщение об ошибке "Объект не поддерживает это свойство или метод"

Marysia 30.05.2019 12:21

Для первого комментария @Marysia просто переключите переменные. Что касается второго, позвольте мне кое-что проверить. Для второго комментария код отлично работает для меня. Ошибка появляется в строке Set wbCopy = Workbooks.Open(uploadfile)?

Damian 30.05.2019 12:23
Ответ принят как подходящий

В VBA вы не должны использовать Ative.

Так что замените все Active, и вы должны использовать PasteSpecial, это лучше, чем Paste

Sub test()

Dim uploadfile As Variant
Dim uploader As Workbook
Dim CurrentBook As Workbook
Dim lastRow As Integer

Set CurrentBook = ThisWorkbook

uploadfile = Application.GetOpenFilename()
    If uploadfile = "False" Then
        Exit Sub
    End If
Set uploader = Workbooks.Open(uploadfile)

Application.CutCopyMode = False
uploader.Worksheets(1).Range("A1:J100").Copy

lastRow = CurrentBook.Worksheets(1).Cells(CurrentBook.Worksheets(1).Rows.Count, "A").End(xlUp).Row + 1
Range("A" & lastRow & ":J" & (lastRow + 100)).PasteSpecial xlPasteValues

uploader.Close

End Sub

Этот код работает для меня,

Добро пожаловать :)

Этот код не будет работать Cells(Rows.Count, "A") поскольку активная книга является книгой копирования, а не книгой вставки, будет получена последняя строка из книги копирования. Вы не упомянули Rows.Count

Damian 30.05.2019 12:22

Ниже вы можете найти пример кода для копирования из одной книги в другую:

Option Explicit

Sub test()

    Dim wbSource As Workbook, wbDestination As Workbook

    'Set both workbooks by name to avoid conflicts
    Set wbSource = Workbooks("Book1")
    Set wbDestination = Workbooks("Book2")

    'Copy paste only values
    wbSource.Worksheets("Sheet1").Range("A1").Copy
    wbDestination.Worksheets("Sheet1").Range("A1").PasteSpecial Paste:=xlPasteValues

End Sub

Другие вопросы по теме