Копирование и вставка данных с использованием кода 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

Ответ 1

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

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

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

Ответ 2

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

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

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