Makro Recorder Makro flexibilisieren
16.10.2018 11:12:21
Martin
ich möchte verschiedene csv Dateien (verschiedene Spaltenanzahlen, verschiedene Zeilenanzahlen) immer auf die gleiche Art und Weise nach Excel importieren.
Dafür habe ich Unter "Daten" - "Importieren" - "Text" eine csv Datei importiert und dies per Makro Recorder aufgezeichnet:
With ActiveSheet.QueryTables.Add(Connection:="TEXT;D:\innotap\WERBER845.csv" _
, Destination:=Range("$A$1"))
.Name = "WERBER845"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(2, 2)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Das passt so jetzt für genau 1 der csv Dateien, die ich importieren möchte. Das aufgezeichnete möchte ich nun aber dynamisieren und auch für andere CSV Dateien nutzbar machen.
Das hier habe:
With ActiveSheet.QueryTables.Add(Connection:="TEXT;D:\innotap\WERBER845.csv" _
, Destination:=Range("$A$1"))
.Name = "WERBER845"
habe ich nun schon an den entsprechenden Stellen durch Variablen angepasst:
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & varDateiInklPfad & "", Destination:=Range("$A$1"))
.Name = strDateiname
Probleme macht mir allerdings folgende Zeile:
.TextFileColumnDataTypes = Array(2, 2)
Die Anzahl der 2en spiegelt hier die Anzahl der Spalten wieder, die nachher in Excel erstellt werden sollen.
Da die csv Dateien unterschiedliche Spaltenanzahlen haben dachte ich, könnte ich mir aus der 1. Zeile meiner csv Datei die bspw. folgenden Inhalt hat:
ssazar_ssazart;text
"11";"744"
"11";"744"
in der 1. Zeile ermitteln, wie viele Spalten die CSV Datei ergeben wird.
Das habe ich folgendermaßen gemacht:
varArray = "2"
If AnzahlSpalten > 1 Then
For x = 1 To AnzahlZeichen
varArray = varArray + ", 2"
Next x
End If
In der Beispiel csv Datei:
ssazar_ssazart;text
"11";"744"
"11";"744"
ergibt die Variant Variable varArray dann den String "2, 2"
Ich bin davon ausgegangen, dass ich diesen String einfach nur hier eintragen muss:
.TextFileColumnDataTypes = Array(2, 2)
also stattdessen dann:
.TextFileColumnDataTypes = Array(varArray)
Es kommt dann aber Laufzeitfehler 5 "Ungültiger Prozeduraufruf oder ungültiges Argument".
Hat jemand eine Idee wie ich die Zeile mit den 2, 2 irgendwie flibilisiert kriege?
.TextFileColumnDataTypes = Array(2, 2)
Eine andere Art des csv Imports hatte ich auch schon ausprobiert, bin dort allerdings gescheitert, weil in den Texten zwischen den " " teilweise Semikolons oder auch doppelte Anfürhungszeichen gesetzt wurden, oder Tab Zeichen, mit denen Excel dann nicht klar kommt. Deshalb würde ich gerne das aufgenommene Makro oben ans Laufen kriegen.
Vielen Dank schon mal im Voraus!
Gruß Martin