AW: CSV-Daten-Import mittels QueryTable
27.04.2018 15:29:44
Chris
Hallo Hansueli,
die Makroaufzeichnung hatte mir ja bereits gezeigt, wie der Befehl für eine nachträgliche Entfernung des Designs aussieht. Hatte nur auf eine Möglichkeit gehofft, ganz ohne dieses Design aus zu kommen.
Was mir die Makroaufzeichnung liefert, ist folgendes:
Sub Makro5()
' Makro5 Makro
ActiveWorkbook.Queries.Add Name:="Original_180328", Formula:= _
"let" & Chr(13) & "" & Chr(10) & " Quelle = Csv.Document(File.Contents(""D:\Test\ _
_Original_180328.csv""),[Delimiter="","", Columns=27, Encoding=1252, QuoteStyle=QuoteStyle.None])," & Chr(13) & "" & Chr(10) & " #""Erste Zeile als Überschriften verwenden"" = Table.PromoteHeaders(Quelle, [PromoteAllScalars=true])," & Chr(13) & "" & Chr(10) & " #""Typ ändern"" = Table.TransformColumnTypes(#""Erste Zeile a" & _
"ls Überschriften verwenden"",{{""IP Adresse"", type text}, {""Datum"", type text}, {"" _
Uhrzeit"", type time}, {""Zeitzone"", type text}, {""laufende Nr."", Int64.Type}, {""Serviceprovider"", type text}, {""Anrede"", type text}, {""Vorname"", type text}, {""Nachname"", type text}, {""Straße"", type text}, {""PLZ"", type text}, {""Ort"", type text}, {""Kennung"", type " & _
"text}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " #""Typ ändern" _
ActiveWorkbook.Worksheets.Add
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location= _
Original_180328;Extended Properties=""""" _
, Destination:=Range("$A$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [Original_180328]")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "Original_180328"
.Refresh BackgroundQuery:=False
End With
ActiveSheet.ListObjects("Original_180328").TableStyle = ""
End Sub
Versteh ich das einigermaßen richtig, dass er mittels Queries.Add erst einmal die einzulesende CSV-Datei als Abfrage erstellt, definiert wie das Trennzeichen ist und welcher Datentyp jede einzelne Spalte ist?
Fehlt dann am Ende nicht das löschen der Abfrage, wenn sie nicht mehr gebraucht wird?
Was der weitere Code im Detail macht, erschließt sich mir allerdings noch nicht vollständig. Außer, dass er scheinbar mit CommandText aus einem irgendwo definierten Array den Inhalt heraus greift.