Как предложить пользователю выбрать файл при использовании макроса для импорта файла данных в новую вкладку?

У меня есть макрос, который в настоящее время создает новый лист и импортирует другой файл excel в этот новый лист.

Затем данные с этого листа переносятся в другие области рабочей книги.

Импортируемый файл будет постоянно иметь другое имя файла. Как настроить приведенный ниже код, чтобы предложить пользователю выбрать файл? (Каталог не изменится).

Sub ImportDemand () Sheets.Add

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=\\Folder\ImportFile_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 = _
    "\\Folder\ImportFile_2011.04.05.xls"
    .Refresh BackgroundQuery:=False
End With

Конец сабвуфера


person Jon    schedule 05.04.2011    source источник


Ответы (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:\MyDocuments\MyDir\"
'Other settings...
fdgOpen.Show
.SourceDataFile = fdgOpen.SelectedItems(1)
person Jean-François Corbett    schedule 06.04.2011
comment
Как объект FileDialog вписывается в мой текущий код? При выполнении импорта файла вручную мне нужно выбрать вкладку из файла Excel, который будет импортирован. в данном случае _All_Demand$. Какой дополнительный код необходим --- Что мне нужно включить, чтобы Excel мог действовать с выбранным источником данных? - person Jon; 06.04.2011
comment
Ну, в вашем коде вы пишете .SourceDataFile = "\\Folder\ImportFile_2011.04.05.xls". Я предполагаю, что именно здесь вы хотите подсказать пользователю, верно? Просто замените эту строку любым из моих примеров выше. И прочтите справку по VBA на странице GetOpenFilename. и/или FileDialog. - person Jean-François Corbett; 06.04.2011
comment
Что касается выбора вкладки, это совсем другое дело. Почему бы вам не задать новый вопрос, чтобы не перегружать этот. К вашему сведению, не забудьте принять этот ответ, если сочтете его полезным. - person Jean-François Corbett; 06.04.2011