Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1648to1652
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

Makro Recorder Makro flexibilisieren

Makro Recorder Makro flexibilisieren
16.10.2018 11:12:21
Martin
Hallo zusammen,
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

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro Recorder Makro flexibilisieren
16.10.2018 11:39:27
michlchen80
hi,
du willst ja quasi text in spalten haben... richtig?
ich habe meine csv dateien immer als txt geöffnet. dann zickt excel nicht so rum und wirft dir alles in die a spalte.
dann kannst du darauf prima das text in spalten machen und musst nicht prüfen, wie viele spalten usw. drin sind.
wäre ggf. ein ansatz.
AW: Makro Recorder Makro flexibilisieren
16.10.2018 11:56:42
Rudi
Hallo,
probiers mal so:
Sub CSV_Import()
Dim vROH, arrDaten(), vTMP, i As Long, j As Long
Const cstrDELIM As String = ";" 'Trennzeichen
Open "c:\test\test3.csv" For Input As #1  'Dateiname anpassen
vROH = Input(LOF(1), 1)
Close #1
vROH = Split(vROH, vbCrLf)
ReDim arrDaten(UBound(vROH), UBound(Split(vROH(LBound(vROH)), cstrDELIM)))
For i = LBound(vROH) To UBound(vROH)
vTMP = Split(vROH(i), cstrDELIM)
For j = LBound(vTMP) To UBound(vTMP)
arrDaten(i, j) = vTMP(j)
Next
Next
ActiveSheet.Cells(1, 1).Resize(UBound(arrDaten), UBound(arrDaten, 2)) = arrDaten
End Sub
Gruß
Rudi
Anzeige
AW: Makro Recorder Makro flexibilisieren
16.10.2018 12:21:15
Martin
Danke Euch beiden, werde die Sache von Rudi mal ausprobieren, aber wäre super wenn jemand konkret zu meinem Fall eine Idee hätte.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige