VBA CSV Import stoppt bei komma

Betrifft: VBA CSV Import stoppt bei komma
von: Patrik Kolly
Geschrieben am: 16.09.2020 11:12:54
Hallo zusammen,
Ich bin neu hier, und habe nicht viel VBA Erfahrung.
Wir benutzen in unserer Firma eine Vorlage für den Import aller *.csv Files aus dem gleichen Ordner. Wir haben nun eine neue Verpackungsanlage erhalten, wo der Lieferant das Format oder besser gesagt die Anordnung geändert der csv Files geändert hat.
Im früheren File waren es nur Zahlen, welche durch ein Semikolon getrennt waren. Nun ist da auch noch Text mit dabei, welcher teilweise Kommas beinhaltet.
Ich habe das Makro nun so hinbekommen, dass der Text importiert wird, und auch das Datum am richtigen Ort hingeschrieben wird.
Leider stoppt das Makro, sobald im Text ein Komma vorhanden ist.
Kann mir da Jemand eine Tipp geben?
Ich verwende dieses Makro:
Sub DatenErfassen()
VorhandeneDatenLoeschen
Dateiname = Dir(ThisWorkbook.Path & "\*.CSV")
ErsteDatei = Dateiname
abschliessen = False
If Dateiname = ThisWorkbook.Name Then
Dateiname = Dir
If Dateiname = ThisWorkbook.Name Then
abschliessen = True
End If
End If
Zeile2 = 8
While (Dateiname <> "" And Not abschliessen)
If (Not Dateiname = ThisWorkbook.Name) Then
Set Datei = Workbooks.Open(ThisWorkbook.Path & "\" & Dateiname)
Zeile = 9
Text = ActiveSheet.Cells(4, 1).Value
Stelle1 = InStr(Text, ";")
Datum = Mid(Text, Stelle1 + 1, 10)
Do While ActiveSheet.Cells(Zeile, 1).Value <> ""
Zeile2 = Zeile2 + 1
Text = ActiveSheet.Cells(Zeile, 1).Value
Stelle1 = 0
For Spalte = 1 To 5
Stelle2 = InStr(Stelle1 + 1, Text, ";")
If Stelle2 = 0 Then
Stelle2 = Len(Text) + 1
End If
ThisWorkbook.Worksheets("Daten").Cells(Zeile2, Spalte).Value = Mid(Text, Stelle1 + 1, _
_
_
Stelle2 - Stelle1 - 1)
Stelle1 = Stelle2
Next Spalte
ThisWorkbook.Worksheets("Daten").Cells(Zeile2, 5).Value = Datum
Zeile = Zeile + 1
Loop
Datei.Close
End If
Dateiname = Dir
If Dateiname = ErsteDatei Then
abschliessen = True
End If
Wend
End Sub
das alte csv:
Alarm number;Activated;Deactivated;Time alarm active
368;00:38:36;00:38:40;00:00:04;
7;00:46:27;00:48:18;00:01:51;
das neue csv:
Alarm number;Description;Activated;Deactivated;Time alarm active
199;0199) Karton Aufsetzer: Kein Karton i Befüllposition.| (sensor S4.7);19:31:25;10:56:17;15:24:52;
1;0001) Comm.: Sicherheitskreis ist nicht zurückgesetzt.;10:56:16;10:56:17;00:00:01;
240;0240) Pick und Place: Rahmen nicht.| (sensor S5.9, Ventil Y12.3);10:56:23;10:57:35;00:01:12;
Bei den Komma S5.9, stoppt der Import.
Beim Debug wird diese Zeile gelb markiert:
ThisWorkbook.Worksheets("Daten").Cells(Zeile2, Spalte).Value = Mid(Text, Stelle1 + 1, Stelle2 - Stelle1 - 1)
Ich verwende Excel 365
Ich hoffe ihr könnt mir da weiterhelfen.
Viele Grüße,
Patrik

Betrifft: AW: VBA CSV Import stoppt bei komma
von: Günther
Geschrieben am: 16.09.2020 11:31:56
Moin,
warum VBA (was du deiner Aussage nach nicht besonders beherrscht), wo es doch für eure Version eine deutlich benutzerfreundlichere Alternative gibt? => Power Query
Gruß
Günther |
mein Excel-Blog

Betrifft: AW: VBA CSV Import stoppt bei komma
von: peterk
Geschrieben am: 16.09.2020 11:40:42
Hallo
Mit Workbook.Open wird die CSV Datei als Komma-Separierte Datei eingelesen. In deinem ursprünglichen Format kamen keine Kommas vor und somit landete alles in Spalte 1, die Dein Code dann mühsam zerpflückte(kleine Tipp: mit der "Split" Funktion würde alles einfacher gehen). Da Du nun ein Komma hast, werden 2 Spalten angelegt (oder auch noch mehr). Dein Code erwartet aber am Ende des Strings ein ";" was bei der Aufteilung auf 2 Spalten aber nicht mehr vorhanden ist, daher der Fehler.
Lösung: Öffne die Datei mit
Set Datei = Workbooks.Open(ThisWorkbook.Path & "\" & Dateiname) Delimiter:=";"
und alles ist wunderschön in Spalten aufgeteilt.
Wenn Du Deinen Code beibehalten willst, verwende als Delimiter z.b. "@" und Du hast alles wieder in einer Spalte.
Peter

Betrifft: AW: VBA CSV Import stoppt bei komma
von: Patrik Kolly
Geschrieben am: 16.09.2020 14:49:31
Hallo Peter
Ich habe das mit dem Delimiter:=";" versucht, erhalte aber die gleiche Fehlermeldung. Oder habe ich da etwas nicht richtig verstanden.
Ich habe so versucht:
Workbooks.Open(ThisWorkbook.Path & "\" & Dateiname, Delimiter:=";")
Oder funktioniert das nur mit dem Split?
Patrik

Betrifft: AW: VBA CSV Import stoppt bei komma
von: peterk
Geschrieben am: 17.09.2020 08:46:19
Hallo Patrik
Deine Syntax ist falsch. Nimm es genau so wie ich es geschrieben habe.
Peter

Betrifft: AW: VBA CSV Import stoppt bei komma
von: Patrik Kolly
Geschrieben am: 17.09.2020 10:47:16
Hallo Peter
Das habe ich auch versucht, aber dann erhalte ich die Fehlermeldung : Fehler beim Kompilieren: Erwartet: Anweisungsende. Oder Fehler beim Kompilieren: Syntaxfehler
Patrik

Betrifft: AW: VBA CSV Import stoppt bei komma
von: peterk
Geschrieben am: 17.09.2020 11:31:58
Hallo Patrik
Sorry, ich hab eine Beistrich vergessen. Richtig:
Set Datei = Workbooks.Open(ThisWorkbook.Path & "\" & Dateiname), Delimiter:=";"
Peter

Betrifft: AW: VBA CSV Import stoppt bei komma
von: Patrik Kolly
Geschrieben am: 17.09.2020 12:38:24
Hallo Peter
Ja das hatte ich auch schon probiert, bekomme aber auch die Fehlermeldung : Fehler beim Kompilieren: Syntaxfehler
Patrik
Beiträge aus dem Excel-Forum zum Thema "VBA CSV Import stoppt bei komma"