Копирование и вставка данных с помощью кода VBA

У меня есть кнопка в электронной таблице, которая при нажатии должна позволить пользователю открыть файл, затем скопировать столбцы A-G электронной таблицы «Данные», а затем вставить данные из этих столбцов на текущий лист.

У меня есть логическая ошибка в коде; он запускается, но вставляет выделение не в то место.

У меня возникли проблемы со ссылкой на две книги.

Вот мой код:

Sub Button1_Click()
    Dim excel As excel.Application
    Dim wb As excel.Workbook
    Dim sht As excel.Worksheet
    Dim f As Object

    Set f = Application.FileDialog(3)
    f.AllowMultiSelect = False
    f.Show

    Set excel = CreateObject("excel.Application")
    Set wb = excel.Workbooks.Open(f.SelectedItems(1))
    Set sht = wb.Worksheets("Data")

    sht.Activate
    sht.Columns("A:G").Select
    Selection.Copy
    Range("A1").Select
    ActiveSheet.Paste

    wb.Close
End Sub

person spookymodem    schedule 21.07.2011    source источник


Ответы (2)


Используйте метод PasteSpecial:

sht.Columns("A:G").Copy
Range("A1").PasteSpecial Paste:=xlPasteValues

НО ваша большая проблема в том, что вы меняете свой ActiveSheet на «Данные» и не меняете его обратно. Вам не нужно выполнять «Активировать и выбирать» в соответствии с моим кодом (предполагается, что ваша кнопка находится на листе, на который вы хотите скопировать).

person Lance Roberts    schedule 21.07.2011
comment
@spookymodem, вы можете щелкнуть стрелку и принять ответ, если он помог вам. - person Lance Roberts; 21.07.2011

«Итак, исходя из этого обсуждения, я думаю, что тогда это должен быть код.

Sub Button1_Click()
    Dim excel As excel.Application
    Dim wb As excel.Workbook
    Dim sht As excel.Worksheet
    Dim f As Object

    Set f = Application.FileDialog(3)
    f.AllowMultiSelect = False
    f.Show

    Set excel = CreateObject("excel.Application")
    Set wb = excel.Workbooks.Open(f.SelectedItems(1))
    Set sht = wb.Worksheets("Data")

    sht.Activate
    sht.Columns("A:G").Copy
    Range("A1").PasteSpecial Paste:=xlPasteValues


    wb.Close
End Sub

'Дай мне знать, если это правильно или шаг был пропущен. Спасибо.

person D1g1t4Lnrg    schedule 09.01.2016