Нужно сделать импорт данных из одного экселевского файла в другой.
В папке "EXCEL" есть файл "С ИМПОРТОМ.xlsm" и лист "мин элемент", на котором создал кнопку "Импорт" с приведенным ниже кодом.
Кнопка импортирует данные из файла "ДАННЫЕ.xlsx" с листа "мин элемент" (диапазон C2:H8).
Но нужно, чтобы при нажатии на кнопку открывалось диалоговое окно выбора импортируемого файла. Что-то на подобие: Данные - Получение внешних данных - Из текста, но на vba.
Макрос
Option Explicit
Sub Кнопка2_Щелчок()
Dim lCalc As Long
Dim sCopyAddress As String
Dim lLastRowMyBook As Long
Dim wsDataSheet As Object
sCopyAddress = "C2:H8" 'диапазон для копирования
With Application
lCalc = .Calculation
.ScreenUpdating = False: .EnableEvents = False: .Calculation = xlManual
End With
Set wsDataSheet = ThisWorkbook.Sheets("мин элемент")
Workbooks.Open Filename:="F:\EXCEL\ДАННЫЕ.xlsx"
With Sheets("мин элемент") 'имя листа в книге, из которого копируем данные
lLastRowMyBook = wsDataSheet.Cells.SpecialCells(xlLastCell).Row + 1
.Range(sCopyAddress).Copy wsDataSheet.Range("C2:H8")
End With
Workbooks("ДАННЫЕ.xlsx").Close False
With Application
.ScreenUpdating = True: .EnableEvents = True: .Calculation = lCalc
End With
End Sub
P.s. Может быть нужно использовать Application.GetOpenFilename?
[вложение удалено администратором]
Макрос
Sub Импорт()
Dim wsDataSheet As Object, sCopyAddress As String
Dim FN_src As String, lCalc As Long
' Юзер выбирает эксель-файл, из которого нужно извлечь данные.
' Полное имя (путь + имя) выбранного файла записывается в переменную "FN_src".
With Application.FileDialog(msoFileDialogFilePicker)
.ButtonName = "OK"
.AllowMultiSelect = False
.Filters.Clear
.Filters.Add "Файлы Excel", "*.xlsx"
.Title = "ВЫБЕРИТЕ ЭКСЕЛЬ-ФАЙЛ, ИЗ КОТОРОГО НУЖНО ИЗВЛЕЧЬ ДАННЫЕ."
If .Show = False Then
Exit Sub
End If
FN_src = .SelectedItems(1)
End With
sCopyAddress = "C2:H8" 'диапазон для копирования
With Application
lCalc = .Calculation
.ScreenUpdating = False: .EnableEvents = False: .Calculation = xlManual
End With
Set wsDataSheet = ThisWorkbook.Sheets("мин элемент")
Workbooks.Open Filename:=FN_src
With Sheets("мин элемент") 'имя листа в книге, из которого копируем данные
.Range(sCopyAddress).Copy wsDataSheet.Range("C2:H8")
End With
Workbooks("ДАННЫЕ.xlsx").Close False
With Application
.ScreenUpdating = True: .EnableEvents = True: .Calculation = lCalc
End With
End Sub
Не знаю, в каких случаях нужно использовать "Application.GetOpenFilename".
С помощью него тоже можно выбрать файл. Но мне кажется, что это старый инструмент, вместо него сделали то, что я вставил в макрос.