Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1932to1936
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 in VBA speichern / Formatierung

CSV in VBA speichern / Formatierung
10.07.2023 15:18:50
Kai

Hallo zusammen,

zur Zeit baue ich mir ein Makro, welches mehrere CSV-Dateien in einem Ordner umformatiert, damit eine weitere Institution
die Daten automatisch verarbeiten kann. Ich versuche praktisch eine Schnittstelle zu entwerfen, die mir schlicht und einfach die
Arbeit erleichtert.

Ich glaube es soweit auch schon gut gelöst zu haben, stoße jedoch auf ein Problem. Nachdem die Formatierung der jeweiligen Datei
abgeschlossen wurde, möchte ich diese natürlich speichern. Und genau da zerhaut es mir die Formatierung.

Sub CSVZeichenketteErsetzenInOrdner()
    Dim folderPath As String
    Dim fileName As String
    Dim csvData As Workbook
    Dim csvSheet As Worksheet
    Dim lastRow As Long
    Dim lastColumn As Long
    Dim i As Long
    Dim j As Long
    
    ' Ordnerpfad mit den CSV-Dateien
    folderPath = "C:\absatzlisten"
    
    ' Überprüfen, ob der Ordner existiert
    If Not FolderExists(folderPath) Then
        MsgBox "Der angegebene Ordner existiert nicht."
        Exit Sub
    End If
    
    ' Schleife über alle CSV-Dateien im Ordner
    fileName = Dir(folderPath & "\*.csv")
    Do While fileName > ""
        ' Öffnen der CSV-Datei
        Set csvData = Workbooks.Open(folderPath & "\" & fileName)
        Set csvSheet = csvData.Sheets(1)
        
        ' Bestimmen der letzten Zeile und Spalte in der CSV-Datei
        lastRow = csvSheet.Cells(csvSheet.Rows.Count, 1).End(xlUp).Row
        lastColumn = csvSheet.Cells(1, csvSheet.Columns.Count).End(xlToLeft).Column
        
        ' Durchsuchen und Ersetzen der Zeichenketten in jeder Zeile
        For i = 1 To lastRow
            For j = 1 To lastColumn
                ' Ersetzen von " durch =
                csvSheet.Cells(i, j).Value = Replace(csvSheet.Cells(i, j).Value, """", "=")
                ' Ersetzen von = == durch =
                csvSheet.Cells(i, j).Value = Replace(csvSheet.Cells(i, j).Value, "= ==", "=")
                ' Ersetzen von === durch =
                csvSheet.Cells(i, j).Value = Replace(csvSheet.Cells(i, j).Value, "===", "=")
                ' Ersetzen von = durch "
                csvSheet.Cells(i, j).Value = Replace(csvSheet.Cells(i, j).Value, "=", Chr(34), 1, -1, vbTextCompare)
                ' Löschen von leerzeichen
                'csvSheet.Cells(i, j).Value = Trim(csvSheet.Cells(i, j).Value)' = Erstmal noch deaktiviert
                Next j
        Next i
        
        ' Speichern und Schließen der CSV-Datei = hier zerschießt sich leider die Formatierung
        csvData.Close SaveChanges:=True
                
        ' Nächste CSV-Datei im Ordner
        fileName = Dir
    Loop
    
    MsgBox "Die Zeichenketten wurden in allen CSV-Dateien im Ordner ersetzt."
End Sub

Function FolderExists(folderPath As String) As Boolean
    Dim folder As Object
    On Error Resume Next
    Set folder = CreateObject("Scripting.FileSystemObject").GetFolder(folderPath)
    On Error GoTo 0
    FolderExists = Not folder Is Nothing
End Function


Wenn ich das Makro mit F8 durchtackte sieht die Tabelle bei den einzelnen Schritten Prima aus.
Erst wenn die Datei gespeichert werden soll, habe ich wieder Anführungszeichen, wo keine hin sollen :-)

Vielleicht bin ich einfach nur grad blind und sehe den Wald vor lauter Bäumen nicht, bin für jede Hilfe dankbar.

Gruß

Kai

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CSV in VBA speichern / Formatierung
10.07.2023 15:35:35
Rudi Maintaire
Hallo,
kannst du eine Beispiel-CSV hochladen?

Gruß
Rudi


AW: CSV in VBA speichern / Formatierung
10.07.2023 16:03:26
Rudi Maintaire
Hallo,
teste mal:
Sub kai()
  Dim vntCSV, vntTmp, i As Long, j As Long
  Dim strFileName As String
  
  Const strFolderPath = "c:\Test\Test2\"
  
  strFileName = Dir(strFolderPath & "*.csv")
  
  Do While strFileName > ""
    Open strFolderPath & strFileName For Input As #1
    Do While Not EOF(1)
      Line Input #1, vntTmp
      vntCSV = vntCSV & vbCrLf & vntTmp
    Loop
    Close #1
    vntCSV = Split(Mid(vntCSV, 2), vbCrLf)
    
    For i = LBound(vntCSV) To UBound(vntCSV)
      vntTmp = Split(vntCSV(i), ";")
      For j = LBound(vntTmp) To UBound(vntTmp)
        vntTmp(j) = Replace(vntTmp(j), Chr(34), "")
        vntTmp(j) = Replace(vntTmp(j), "= ==", "=")
        vntTmp(j) = Replace(vntTmp(j), "===", "=")
        vntTmp(j) = Replace(vntTmp(j), "=", Chr(34), 1, -1, vbTextCompare)
      Next j
      vntCSV(i) = Join(vntTmp, ";")
    Next i
    
    vntCSV = Join(vntCSV, vbCrLf)
    Open strFolderPath & strFileName For Output As #1
    Print #1, vntCSV
    Close #1
    strFileName = Dir
  Loop
  
End Sub
Vermeidet die Excel-Automatismen.

Gruß
Rudi


Anzeige
AW: CSV in VBA speichern / Formatierung
10.07.2023 16:09:08
Kai
Danke Dir Rudi!

Sieht soweit gut aus, leider müssen diese Anführungszeichen wie folgt stehen bleiben, weil sonst der Empfänger es nicht automatisiert verarbeiten kann:

Dies müsste das Ergebnis sein:
"Kundennummer";"Händler Name";"EAN";"Hersteller Artikelnr.";"Menge";"Datum";"Typ";"Empfaenger_ILN"
"10000009";"Haselfasel GmbH";"5702326549762";"GGU SK06 0070";1;"07.07.23";"A";""
"10000009";"Haselfasel GmbH";"5702326550560";"GPU MK06 0070";1;"07.07.23";"A";""
"10000009";"Haselfasel GmbH";"5702327870919";"ZOZ 221 S22";4;"07.07.23";"A";""
"10000009";"Haselfasel GmbH";"5702326620485";"SSL YK85 0000S";1;"07.07.23";"A";""
"10000009";"Haselfasel GmbH";"5702326108983";"SSL SK08 0000S";-2;"07.07.23";"A";""
"10000009";"Haselfasel GmbH";"5702326987861";"EDZ SK06 2000";1;"07.07.23";"A";""
"10000009";"Haselfasel GmbH";"5702327869920";"EZ MK06 1000";1;"07.07.23";"A";""


Anzeige
AW: CSV in VBA speichern / Formatierung
10.07.2023 16:23:29
Rudi Maintaire
dann vielleicht so:
Sub kai()
  Dim vntCSV, vntTmp, i As Long, j As Long
  Dim strFileName As String
  
  Const strFolderPath = "c:\Test\Test2\"
  
  strFileName = Dir(strFolderPath & "*.csv")
  
  Do While strFileName > ""
    Open strFolderPath & strFileName For Input As #1
    Do While Not EOF(1)
      Line Input #1, vntTmp
      vntCSV = vntCSV & vbCrLf & vntTmp
    Loop
    Close #1
    vntCSV = Split(Mid(vntCSV, 2), vbCrLf)
    
    For i = LBound(vntCSV) To UBound(vntCSV)
      vntTmp = Split(vntCSV(i), ";")
      For j = LBound(vntTmp) To UBound(vntTmp)
        vntTmp(j) = Replace(vntTmp(j), Chr(34), "")
        vntTmp(j) = Replace(vntTmp(j), "= ==", "=")
        vntTmp(j) = Replace(vntTmp(j), "===", "=")
        vntTmp(j) = Replace(vntTmp(j), "=", Chr(34), 1, -1, vbTextCompare)
        vntTmp(j) = Chr(34) & Trim(vntTmp(j)) & Chr(34)
      Next j
      vntCSV(i) = Join(vntTmp, ";")
    Next i
    
    vntCSV = Join(vntCSV, vbCrLf)
    Open strFolderPath & strFileName For Output As #1
    Print #1, vntCSV
    Close #1
    strFileName = Dir
  Loop
  
End Sub
Gruß
Rudi


Anzeige
AW: CSV in VBA speichern / Formatierung
10.07.2023 15:58:19
UweD
Hallo

EIne Vermutung:
Bei csv werden die einzelnen Spalten durch (meist) Semikolon voneinander getrennt
Sind in einer Zelle aber schon ; enthalten, legt Excel Anführungszeichen drum herum um die Spaltentrennung sauber zu gewährleisten

Zeig mal die Quelldaten.

LG UweD


AW: CSV in VBA speichern / Formatierung
10.07.2023 16:01:02
Kai
Hi,

also das sind die Quelldaten :-)

" ""Kundennummer""";" ""Händler Name""";" ""EAN""";" ""Hersteller Artikelnr.""";" ""Menge""";" ""Datum""";" ""Typ""";" ""Empfaenger_ILN"""
" ""10000009""";" ""Haselfasel GmbH""";" ""5702326549762""";" ""GGU SK06 0070""";1;" ""07.07.23""";" ""A""";" """""
" ""10000009""";" ""Haselfasel GmbH""";" ""5702326550560""";" ""GPU MK06 0070""";1;" ""07.07.23""";" ""A""";" """""
" ""10000009""";" ""Haselfasel GmbH""";" ""5702327870919""";" ""ZOZ 221 S22""";4;" ""07.07.23""";" ""A""";" """""
" ""10000009""";" ""Haselfasel GmbH""";" ""5702326620485""";" ""SSL YK85 0000S""";1;" ""07.07.23""";" ""A""";" """""
" ""10000009""";" ""Haselfasel GmbH""";" ""5702326108983""";" ""SSL SK08 0000S""";-2;" ""07.07.23""";" ""A""";" """""
" ""10000009""";" ""Haselfasel GmbH""";" ""5702326987861""";" ""EDZ SK06 2000""";1;" ""07.07.23""";" ""A""";" """""
" ""10000009""";" ""Haselfasel GmbH""";" ""5702327869920""";" ""EZ MK06 1000""";1;" ""07.07.23""";" ""A""";" """""

Ich versuche sie in folgendes Format zu drücken:

"Kundennummer";"Händler Name";"EAN";"Hersteller Artikelnr.";"Menge";"Datum";"Typ";"Empfaenger_ILN"
"10000009";"Haselfasel GmbH";"5702326549762";"GGU SK06 0070";1;"07.07.23";"A";""
"10000009";"Haselfasel GmbH";"5702326550560";"GPU MK06 0070";1;"07.07.23";"A";""
"10000009";"Haselfasel GmbH";"5702327870919";"ZOZ 221 S22";4;"07.07.23";"A";""
"10000009";"Haselfasel GmbH";"5702326620485";"SSL YK85 0000S";1;"07.07.23";"A";""
"10000009";"Haselfasel GmbH";"5702326108983";"SSL SK08 0000S";-2;"07.07.23";"A";""
"10000009";"Haselfasel GmbH";"5702326987861";"EDZ SK06 2000";1;"07.07.23";"A";""
"10000009";"Haselfasel GmbH";"5702327869920";"EZ MK06 1000";1;"07.07.23";"A";""


Anzeige
AW: CSV in VBA speichern / Formatierung
10.07.2023 16:16:03
Daniel
Hi
mal so also Prinzip:
1. Datei mit Workbooks.OpenText öffnen. Dabei Tabulator als Trennzeichen angeben (wie das geht, sollte in der Hilfe stehen)
Dann sollte alles in einer Spalte stehen.
2. in der Spalte dann mit Columns(1).Replace What:="""""", """", lookat:=xlpart die Ersetzungen durchführen (hier werden 2 Anfz. durch ein 1 Anfz. ersetzt)
dies ggf so lange wiederholen, bis nur noch ein Anfz übrig bleibt (es gibt keinen Fehler, wenn man öfters als benötigt durchführt
3. Datei dann mit SaveAs und dem FileFormat CSV speichern.

zum überprüfen, ob die Umwandlung erfolgreich war, nicht Excel verwenden sondern einen einfachen Texteditor.
Gruß Daniel


Anzeige
AW: CSV in VBA speichern / Formatierung
10.07.2023 16:23:43
Kai
Hi Daniel,

danke Dir!

Werde das testen sobald ich wieder am Rechner bin und gebe Rückinfo wie blöd ich mich angestellt habe :-)

Gruß
Kai


AW: CSV in VBA speichern / Formatierung
10.07.2023 17:00:18
snb
Bearbeite csv-files als csv files:

Sub M_snb()
  c00 = "G:\OF\"
  c01 = Dir(c00 & "*.csv")
  
  With CreateObject("scripting.filesystemobject")
    Do While c01 > ""
      c02 = .opentextfile(c00 & c01).readall
      .createtextfile(c00 & c01).write Replace(Replace(Replace(Replace(c02, """", "="), "= ==", "="), "===", "="), "=", Chr(34))
      c01 = dir
     Loop
   End With
End Sub


Anzeige
AW: CSV in VBA speichern / Formatierung
11.07.2023 21:27:30
Kai
Entschuldigt die späte Rückmeldung!

Hier war die Hölle los...

Danke Dir snb, Deine Lösung führte zum Ziel.

Vielen Dank Dir und all den anderen für die Informationen und Hilfestellungen!

Man hört einfach nicht auf zu lernen :-)

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige