#vba #import #excel #command-prompt
#vba #импорт #excel #командная строка
Вопрос:
У меня есть макрос, который в данный момент создает новый лист и импортирует другой файл Excel в этот новый лист.
Данные с этого листа затем переносятся в другие области книги.
Импортируемый файл будет постоянно иметь другое имя файла. Как мне настроить приведенный ниже код, чтобы он предлагал пользователю выбрать файл? (Каталог не изменится).
Листы с вложенным ImportDemand().Добавить
Sheets(2).Select
Sheets(2).Name = "ImportedDemand"
Range("E42").Select
With ActiveSheet.QueryTables.Add(Connection:=Array( _
"OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=\FolderImportFile_2011.04.05.xls;Mode=Share Deny Write;Extended Properties=""HDR=YES;"";Jet OLEDB:System d" _
, _
"atabase="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;" _
, _
"Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="""";Jet OLEDB:Create Sys" _
, _
"tem Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Repli" _
, "ca Repair=False;Jet OLEDB:SFP=False"), Destination:=Range("A1"))
.CommandType = xlCmdTable
.CommandText = Array("_All_Demand$")
.Name = "ImportFile_2011.04.05"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.SourceDataFile = _
"\FolderImportFile_2011.04.05.xls"
.Refresh BackgroundQuery:=False
End With
End Sub
Ответ №1:
Вы можете использовать GetOpenFilename
:
.SourceDataFile = Application.GetOpenFilename("Excel workbooks (*.xls), *.xls")
Другим вариантом является объект FileDialog. Это обеспечивает большую гибкость.
Dim fdgOpen As FileDialog
Set fdgOpen = Application.FileDialog(msoFileDialogOpen)
fdgOpen.Title = "Please open a data file..."
fdgOpen.InitialFileName = "C:MyDocumentsMyDir"
'Other settings...
fdgOpen.Show
.SourceDataFile = fdgOpen.SelectedItems(1)
Комментарии:
1. Как объект FileDialog вписывается в мой текущий код? При выполнении импорта файла вручную мне нужно выбрать вкладку из файла Excel, который будет импортирован. в данном случае «_All_Demand$». Какой дополнительный код необходим — Что мне нужно включить, чтобы Excel предпринял действие с выбранным источником данных?
2. Ну, в вашем коде, который вы пишете
.SourceDataFile = "\FolderImportFile_2011.04.05.xls"
. Я предполагаю, что это то место, где вы хотите запросить пользователя, верно? Просто замените эту строку любым из моих примеров выше. И прочитайте справку VBA по GetOpenFileName и / или FileDialog .3. Что касается выбора вкладки, это совсем другой вопрос. Почему бы вам не задать новый вопрос, чтобы не перегружать этот. К вашему сведению, не забудьте принять этот ответ, если сочтете его полезным.