Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1620to1624
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

CSV-Daten-Import mittels QueryTable

CSV-Daten-Import mittels QueryTable
26.04.2018 20:54:44
Chris
’Nabend,
das Thema ist sicher schon oft angesprochen worden, als VBA-Anfänger tue ich mich bisher aber schwer daran, die vorhandenen Lösungen an meine Bedürfnisse anzupassen.
Was mein Ziel ist: Mit einem Makro möchte ich in einer offenen Arbeitsmappe die Daten einer CSV-Datei als neues Tabellenblatt importieren.
Zur Verfügung steht mir dafür Excel 2016 und ich dachte an die QueryTable-Funktion.
Die Daten in der CSV-Datei sind mittels Komma getrennt und enthalten in der ersten Zeile eine Überschrift, die ebenfalls übernommen werden soll.
Das neue Tabellenblatt möchte ich, einsortiert ganz rechts als letztes Blatt, mit dem Namen der CSV-Datei benennen - ohne die Endung CSV.
Meine ersten Versuche in der Richtung hab ich mit dem Makrorecorder von Excel 2016 und der Daten-Importfunktion gemacht. Das Ergebnis enthält aber unter anderem farblich gestaltete Zeilen und Spalten, ohne das die CSV-Datei dafür eine Grundlage liefert. Kurzum, die Importfunktion von Excel scheint zusätzliche (Design-)Formatierungen vorzunehmen, die ich dort nicht verhindern kann.
Kann mir hierzu jemand weiter helfen?
Wenn der dafür passende Code auch noch ein paar Erläuterungen der einzelnen Schritte enthielte, wäre das Traumhaft,
Vielen Dank schon mal für eure Mühe.

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CSV-Daten-Import mittels QueryTable
27.04.2018 10:05:56
mmat
Moin,
Guck mal ob das so für dich passt. Ggf ist noch ein wenig Feinschliff erforderlich. Aber das ist garantiert ohne erzwungene Designer-Farben ...
Sub ImportCSV()
Dim d As String
d = "C:\MeinOrdner\Datei.txt" 'Anpassen
Workbooks.OpenText Filename:=d, Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, _
Comma:=True, Space:=False, Other:=False
Columns.AutoFit
Range("A1").Select
End Sub

AW: CSV-Daten-Import mittels QueryTable
27.04.2018 15:01:25
Chris
Hallo mmat,
dass damit keine unerwünschten Designfarben hinzugefügt werden, stimmt.
Der Grund dafür ist allerdings, dass dein Code die für die Variable "d" definierte CSV-Datei öffnet.
Soweit ich das richtig nachlese, ist das auch der Sinn der von dir verwendeten Methode Workbooks.OpenText
Mein Ziel ist es aber, dass ich eine offene, leere Arbeitsmappe mit dem Makro habe und dort den Inhalt einer CSV-Datei als neues, letztes Tabellenblatt einfügen möchte.
Anzeige
AW: CSV-Daten-Import mittels QueryTable
27.04.2018 16:10:42
mmat
Hallo Chris,
viele Wege führen nach Rom. Bei meinem Code brauchts für Deine Anforderung 2 Zeilen mehr ...
Sub ImportCSV()
Dim d As String, wb As Workbook
Set wb = ActiveWorkbook
d = "C:\MeinOrdner\Datei.txt" 'Anpassen
d = "U:\FSP-Daten\Excel\BT1-Muster.txt"
Workbooks.OpenText Filename:=d, Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, _
Comma:=True, Space:=False, Other:=False
Columns.AutoFit
Range("A1").Select
ActiveSheet.Move after:=wb.Sheets(wb.Sheets.Count)
End Sub

Anzeige
AW: CSV-Daten-Import mittels QueryTable
27.04.2018 11:07:32
EtoPHG
Hallo Chris,
Zitat: Kurzum, die Importfunktion von Excel scheint zusätzliche (Design-)Formatierungen vorzunehmen, die ich dort nicht verhindern kann.
Ja das ist so, weil XL aus Queries automatisch ein sogenanntes ListObject macht.
Das ist IMHO auch gut so. Wer sich an der 'Standardformatierung' stört kann diese im Menü-Tab |Entwurf| immer noch nach seinem Gusto einstellen. Ich vermute aber, dass durch deine Makroaufzeichnung immer ein neues ListObject angelegt wird, statt immer wieder das einmalig erstellte zu nutzen.
Für eine konkrete Hilfestellung ist eine Beispielmappe, incl. aufgezeichnetem Code nötig
Gruess Hansueli
Anzeige
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.
Anzeige
AW: CSV-Daten-Import mittels QueryTable
27.04.2018 16:25:43
mmat
Hallo Chris,
ja, du hast den Hintergrund des Codes einigermaßen verstanden. Command-Text ist nix weiter wie eine SQL-Abfrage, und die Datenbank deine Textdatei (das Array...).
Die Abfrage wird nicht gelöscht, denn in Excel gibt's bei diesen Abfragen die Möglichkeit mit einem Knopfdruck die Daten zu aktualisieren (was in deinem Fall vielleicht gar keinen Sinn macht).

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige