Microsoft Excel

Herbers Excel/VBA-Archiv

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"