2012-04-02 9 views
0

auszuwählen. Ich führe ein Makro aus, das automatisch CSV-Dateien aufnimmt und sie in bestimmte Arbeitsblätter in meiner Arbeitsmappe importiert. Ich möchte jedoch eine größere Flexibilität hinzufügen, indem der Benutzer die Dateien zum Importieren auswählt, anstatt dass der Makro automatisch die CSV-Dateien abgreift, da sich die Benennung ebenso wie das Verzeichnis ändern kann. Ich bin neu bei VBA und habe versucht, MsoFileDialogType und GetOpenFilename besser zu verstehen, aber ich habe Schwierigkeiten, das Konzept/die Implementierung in meinen Code zu fassen.Makro, um den Benutzer aufzufordern, CSV-Dateien für den Import in ein vorhandenes Blatt in der Arbeitsmappe

Was ich letztlich möchte, ist für den Benutzer auf eine Schaltfläche auf der Arbeitsmappe Front-End klicken. Sie werden mit einer Nachricht aufgefordert, die erste CSV-Datei für den Import auszuwählen. Diese CSV-Datei wird in ein vorbenanntes Arbeitsblatt in der Arbeitsmappe temp1 importiert. Da die Datendateien jedoch paarweise vorliegen, möchte ich, dass der Benutzer die nächste CSV-Datei nach der ersten in temp2 auswählen kann.

Was ich habe, zur Zeit ist:

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) 

Danke.

Antwort

3

Vielleicht etwas in diesen Zeilen.

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

Hallo Remou, habe ich versucht, den Code der Umsetzung aber diese Fehler festgestellt: „Benutzerdefinierte Typ nicht definiert“ und markiert diese Zeile -> Dim DlgOpen Als File – VMO

+0

Welche Version von Excel verwenden Sie? Können Sie der Microsoft Office x.x-Objektbibliothek einen Verweis hinzufügen? – Fionnuala

+0

Hallo Remou, ich benutze Mac Office 2011. Ich ging unter Extras -> Referenzen, und stellte sicher, dass Visual Basic für Applikationen, Microsoft Excel 14.0 Objektbibliothek und Microsoft Office 14.0 Objektbibliothek überprüft wurden. – VMO