Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

EXCEL VBA ADO nach Semikolon separieren

Forumthread: EXCEL VBA ADO nach Semikolon separieren

EXCEL VBA ADO nach Semikolon separieren
05.04.2023 14:48:09
Script Kidd

Hallo, ich nutze diesen Code um alle Daten einer CSV Datei zu kopieren ohne diese öffnen zu müssen:

Sub GetDatafromCSV()

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim FileName As String
    
    Set cn = New ADODB.Connection
    
        cn.ConnectionString = _
        "Provider=Microsoft.ACE.OLEDB.16.0;" & _
        "Data Source=" & GetLocalPath(ThisWorkbook.Path) & "\;" & _
        "Extended Properties='text;HDR=YES;FMT=Delimited(';')'"
    
    cn.Open
    
    Set rs = New ADODB.Recordset
    
    rs.ActiveConnection = cn
    rs.Source = "SELECT * FROM [Test.csv]"
    rs.Open
    
    Tabelle2.Range("A21").CopyFromRecordset rs
    
    rs.Close
    cn.Close

End Sub


Leider wird hiermit nur nach Komma separiert, also die nächste Spalte genutzt und nicht nach Semikolon. Es landet also mit den aktuellen Daten alles in Spalte A bis C (In der CSV sind es aber eigentlich A bis W).
Ich sitze jetzt schon einige Stunden vor Google und habe bisher keine praktikable Lösung gefunden.
Systemseitig ist das Semikolon als Trennzeichen eingetragen, wird aber leider nicht genutzt.
Schema.ini Datei ist leider auch keine Lösung. und andere "Provider" wie Jet4.0 oder Text Driver kriege ich nicht zum laufen da 64-bit Betriebssystem.

Bin für jeden Hinweis dankbar!

Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: EXCEL VBA ADO nach Semikolon separieren
05.04.2023 14:58:09
Rudi Maintaire
Hallo,
ich mach das nach diesem Schema:
Sub CSV_Import()
  Dim vROH, arrDaten(), vTMP, i As Long, j As Long
  Dim iMAX As Long
  Const cstrDELIM As String = ";" 'Trennzeichen

  Open "c:\test.csv" For Input As #1
  Do While Not EOF(1)
    Line Input #1, vTMP
    If Len(vTMP) Then
      vROH = vROH & vbCrLf & vTMP
    End If
    iMAX = Application.Max(iMAX, UBound(Split(vTMP, cstrDELIM)))
  Loop
  Close #1
  
  vROH = Mid(vROH, 2)
  vROH = Split(vROH, vbCrLf)
  
  ReDim arrDaten(UBound(vROH), iMAX)
  
  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
    
  Worksheets.Add.Cells(1, 1).Resize(UBound(arrDaten) + 1, UBound(arrDaten, 2) + 1) = arrDaten
  
End Sub
Gruß
Rudi

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

EXCEL VBA ADO nach Semikolon separieren


Schritt-für-Schritt-Anleitung

Um Daten aus einer CSV-Datei, die durch Semikolons getrennt sind, in Excel zu importieren, kannst du den folgenden VBA-Code verwenden. Dieser Code nutzt ADO, um die Daten ohne das Öffnen der Datei zu kopieren.

Sub GetDatafromCSV()

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim FileName As String

    Set cn = New ADODB.Connection

    cn.ConnectionString = _
        "Provider=Microsoft.ACE.OLEDB.16.0;" & _
        "Data Source=" & GetLocalPath(ThisWorkbook.Path) & "\;" & _
        "Extended Properties='text;HDR=YES;FMT=Delimited('';'')'"

    cn.Open

    Set rs = New ADODB.Recordset

    rs.ActiveConnection = cn
    rs.Source = "SELECT * FROM [Test.csv]"
    rs.Open

    Tabelle2.Range("A21").CopyFromRecordset rs

    rs.Close
    cn.Close

End Sub

Stelle sicher, dass du die Extended Properties so anpasst, dass das Semikolon als Trennzeichen verwendet wird (FMT=Delimited(';')). Wenn du Probleme hast, könnte es daran liegen, dass Excel standardmäßig Kommas als Trennzeichen verwendet.


Häufige Fehler und Lösungen

  1. Fehler: Daten landen in der falschen Spalte

    • Lösung: Überprüfe, ob die Extended Properties korrekt auf Semikolon gesetzt sind. Verwende FMT=Delimited(';').
  2. Fehler: Verbindung kann nicht hergestellt werden

    • Lösung: Stelle sicher, dass der Microsoft.ACE.OLEDB.16.0 Provider korrekt installiert ist. Möglicherweise musst du eine 32-Bit-Version von Excel auf einem 64-Bit-Betriebssystem verwenden.
  3. Fehler: Keine Daten angezeigt

    • Lösung: Prüfe die Datei Schema.ini. Diese Datei sollte im gleichen Verzeichnis wie die CSV-Datei liegen und die erforderlichen Einstellungen enthalten.

Alternative Methoden

Wenn die ADO-Methode nicht funktioniert oder du eine andere Möglichkeit bevorzugst, kannst du auch die folgende VBA-Lösung ausprobieren, die auf der Standard-Dateioperation basiert:

Sub CSV_Import()
    Dim vROH, arrDaten() As Variant, vTMP As String
    Dim i As Long, j As Long, iMAX As Long
    Const cstrDELIM As String = ";" ' Trennzeichen

    Open "c:\test.csv" For Input As #1
    Do While Not EOF(1)
        Line Input #1, vTMP
        If Len(vTMP) Then
            vROH = vROH & vbCrLf & vTMP
        End If
        iMAX = Application.Max(iMAX, UBound(Split(vTMP, cstrDELIM)))
    Loop
    Close #1

    vROH = Mid(vROH, 2)
    vROH = Split(vROH, vbCrLf)

    ReDim arrDaten(UBound(vROH), iMAX)

    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 j
    Next i

    Worksheets.Add.Cells(1, 1).Resize(UBound(arrDaten) + 1, UBound(arrDaten, 2) + 1) = arrDaten
End Sub

Diese Methode verwendet die Line Input-Anweisung, um Daten aus der CSV-Datei zu lesen und sie in ein Array zu speichern.


Praktische Beispiele

  1. Importiere eine CSV-Datei mit Semikolon-Trennzeichen:

    • Benutze die erste Methode, um Daten aus data.csv zu importieren, indem du den Dateipfad entsprechend anpasst.
  2. Speichern als CSV mit Semikolon:

    • Wenn du Daten in einem bestimmten Format speichern möchtest, kannst du den folgenden Code verwenden:
Sub SaveAsCSV()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Tabelle1")
    ws.SaveAs Filename:="C:\output.csv", FileFormat:=xlCSV, CreateBackup:=False
End Sub

Achte darauf, dass Excel standardmäßig Kommas verwendet. Du musst möglicherweise die CSV-Datei nach dem Speichern in einem Texteditor öffnen und die Kommas durch Semikolons ersetzen.


Tipps für Profis

  • Beachte die Version: Stelle sicher, dass du die richtige ADO-Version (32-Bit oder 64-Bit) verwendest, abhängig von deiner Excel-Version.
  • Verwende Fehlerbehandlung: Implementiere On Error Resume Next und On Error GoTo 0, um potenzielle Fehler in deinem Code abzufangen und zu behandeln.
  • Vermeide harte Kodierung von Dateipfaden: Verwende Dialogfelder, um den Benutzer nach dem Dateipfad zu fragen, anstatt ihn fest im Code zu verankern.

FAQ: Häufige Fragen

1. Wie kann ich die Verbindung zur CSV-Datei überprüfen?
Du kannst die Verbindung testen, indem du den Code Schritt für Schritt durchführst und nach der cn.Open-Anweisung überprüfst, ob ein Fehler auftritt.

2. Was ist der Unterschied zwischen ADO und dem direkten Import?
ADO ermöglicht eine flexiblere Handhabung von Datenquellen und kann große Datenmengen effizienter verarbeiten als direktes Kopieren durch Zeilen. Es ist besonders nützlich, wenn du Daten aus verschiedenen Quellen kombinieren möchtest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige