2012-04-02 1 views
0

Я запускаю макрос, который автоматически принимает файлы csv и импортирует их в определенные рабочие листы в моей книге. Тем не менее, я хотел бы добавить большую гибкость, если пользователь будет выбирать файлы для импорта, вместо того, чтобы макрос автоматически захватывал файлы csv, потому что именование могло измениться, а также каталог. Я новичок в VBA и стараюсь лучше понять MsoFileDialogType и GetOpenFilename, но с трудом пытаюсь понять концепцию/реализацию в своем коде.Macro, чтобы пригласить пользователя выбрать CSV-файлы для импорта в существующий лист в рабочей книге

В конечном итоге я хочу, чтобы пользователь нажал кнопку на лицевой панели рабочей книги. Получите запрос с сообщением, чтобы выбрать первый CSV-файл для импорта. Этот файл csv будет импортирован в предварительно названный рабочий лист в рабочей книге temp1. Однако, поскольку файлы данных попадают парами, я хочу, чтобы пользователь мог выбрать следующий файл csv после первого в temp2.

То, что я в настоящее время:

Worksheets.Add 
ActiveSheet.Name = "temp1" 
With ActiveSheet.QueryTables.Add(Connection:= _ 
     "TEXT;MAC Directory path here" _ 
     , Destination:=Range("A1")) 
     .Name = "temp 1 03.02.12" 
     .FieldNames = True 
     .RowNumbers = False 
     .FillAdjacentFormulas = False 
     .RefreshOnFileOpen = False 
     .BackgroundQuery = True 
     .RefreshStyle = xlInsertDeleteCells 
     .SavePassword = False 
     .SaveData = True 
     .AdjustColumnWidth = True 
     .TextFilePromptOnRefresh = False 
     .TextFilePlatform = xlMacintosh 
     .TextFileStartRow = 1 
     .TextFileParseType = xlDelimited 
     .TextFileTextQualifier = xlTextQualifierDoubleQuote 
     .TextFileConsecutiveDelimiter = False 
     .TextFileTabDelimiter = False 
     .TextFileSemicolonDelimiter = False 
     .TextFileCommaDelimiter = True 
     .TextFileSpaceDelimiter = False 
     .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _ 
     1, 1, 1) 
     .Refresh BackgroundQuery:=False 
     .UseListObject = False 
End With 
ActiveSheet.Move after:=Worksheets(Worksheets.Count) 

Спасибо.

ответ

3

Возможно, что-то на этих линиях.

Sub GetCSVList() 
Dim dlgOpen As FileDialog 
Set dlgOpen = Application.FileDialog(msoFileDialogFilePicker) 
With dlgOpen 
    .AllowMultiSelect = True 
    ''Start in 
    .InitialFileName = "Z:\docs\" 
    .Show 
End With 

For Each fname In dlgOpen.SelectedItems 
    ImportCSV fname 
Next 
End Sub 

Sub ImportCSV(fname) 
Set ws = Worksheets.Add(after:=Worksheets(Worksheets.Count)) 
ws.Name = "temp" & Worksheets.Count + 1 

With ws.QueryTables.Add(_ 
     Connection:="TEXT;" & fname, _ 
     Destination:=Range("A1")) 
    .Name = "Temp" & Worksheets.Count + 1 
    .FieldNames = True 
    .RowNumbers = False 
    .FillAdjacentFormulas = False 
    .PreserveFormatting = True 
    .RefreshOnFileOpen = False 
    .BackgroundQuery = True 
    .RefreshStyle = xlInsertDeleteCells 
    .SavePassword = False 
    .SaveData = True 
    .AdjustColumnWidth = True 
    .TextFilePromptOnRefresh = False 
    .TextFilePlatform = xlMacintosh 
    .TextFileStartRow = 1 
    .TextFileParseType = xlDelimited 
    .TextFileTextQualifier = xlTextQualifierDoubleQuote 
    .TextFileConsecutiveDelimiter = False 
    .TextFileTabDelimiter = False 
    .TextFileSemicolonDelimiter = False 
    .TextFileCommaDelimiter = True 
    .TextFileSpaceDelimiter = False 
    .Refresh BackgroundQuery:=False 
    '.UseListObject = False 
End With 
End Sub 
+0

Привет Remou, я попытался реализации кода, но столкнулся с этой ошибки: «определяемого пользователем типа не определен» и выделена эта строка -> Dim dlgOpen Как FileDialog – VMO

+0

Какая версия Excel вы используете? Вы можете добавить ссылку на библиотеку объектов Microsoft Office x.x? – Fionnuala

+0

Привет, Remou, я использую Mac Office 2011. Я перешел под Инструменты -> Ссылки и удостоверился, что были проверены Visual Basic для приложений, Библиотека объектов Microsoft Excel 14.0 и Библиотека объектов Microsoft Office 14.0. – VMO