Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: CSV Import mit VBA

CSV Import mit VBA
29.08.2013 14:36:27
Hendrik
Hallo liebe Herber Gemeinde,
ich bin zur Zeit auf der Suche nach einer Lösung für den Import von 8760 CSV Dateien in eine einzelne Excel Datei.
Als Ansatz habe ich hier im Forumsarchiv von "Horst" folgenden Code gefunden und konnten diesen an meine Bedürfnisse soweit anpassen, dass das Makro das erledigt, was es soll :-)
Das Problem ist nur, dass beim Excel beim einlesen jeder einzelnen Datei verlangt, dass ich das Löschen der Zwischenablage bestätige.
Ich hatte bereits versucht durch das Einfügen des Befehls
application.cutcopymode = false 
dies zu unterbinden, jedoch leider ohne Erfolg ...
Wenn es nur ein paar Dateien wären, wäre diese Meldung ja nicht weiter schlimm, aber 8760 mal den Button zu klicken geht dann doch an die Geduldsgrenze ;-)
Sub CSV_Dateien_importieren()
' Daten aus CSV-Dateien einfügen, Daten sind durch Semicolon getrennt, _
Dezimalstelle ist Punkt
' im aktiven Blatt werden Daten aus CSV Dateien im gewählten Verzeichnis eingefügt
Dim wb As Workbook, wks As Worksheet, wbAktiv As Workbook, wksAktiv As Worksheet
Dim rngZelle As Range
Dim strVerzeichnis As String
Dim Dateiname As Variant, DateinameTXT As String
Const strZelleDatum As String = "A2" 'Zelle mit Datum in CSV-Datei
Const strBereich As String = "A2:B97" 'zu kopierender Bereich in CSV-Datei
Const lngZeilenBereich As Long = 96 'Anzahl Zeilen des kopierten Bereichs in CSV-datei
Dateiname = Application.GetOpenFilename(FileFilter:="CSV (*.csv), *.csv", _
Title:="CSV-Datei im Verzeichnis auswählen")
If Dateiname = False Then Exit Sub
strVerzeichnis = VBA.CurDir
Set wbAktiv = ActiveWorkbook
Set wksAktiv = ActiveSheet
'Nächste freie Zelle in Spalte B (2) am Ende suchen
Set rngZelle = wksAktiv.Cells(Rows.Count, 2).End(xlUp).Offset(1, 0)
Dateiname = Dir(strVerzeichnis & Application.PathSeparator & "*.csv")
Application.ScreenUpdating = False
Do Until Dateiname = ""
'CSV-Datei temporär als txt-Datei kopieren
VBA.FileCopy Source:=Dateiname, Destination:=Left(Dateiname, Len(Dateiname) - 3) & "txt"
DateinameTXT = Left(Dateiname, Len(Dateiname) - 3) & "txt"
'Umbenannte Kopie öffnen
Application.Workbooks.OpenText Filename:=DateinameTXT, Origin:=xlWindows, _
StartRow:=1, _
DataType:=xlDelimited, ConsecutiveDelimiter:=False, _
Tab:=False, _
Semicolon:=True, _
Comma:=False, _
Space:=False, _
Other:=False, _
DecimalSeparator:=".", ThousandsSeparator:=","
Set wb = ActiveWorkbook
'Daten Kopieren
wb.Sheets(1).Range(strBereich).Copy
rngZelle.PasteSpecial Paste:=xlPasteValues
'Datum aus CSV-Datei in Spalte links von den Daten einfügen
wksAktiv.Range(rngZelle.Offset(0, -1), rngZelle.Offset(lngZeilenBereich - 1, -1)).Value _
= wb.Sheets(1).Range(strZelleDatum)
'Nächste Einfügezelle setzen
Set rngZelle = rngZelle.Offset(lngZeilenBereich, 0)
wb.Close savechanges:=False
'TXT-Kopie wieder löschen
VBA.Kill (DateinameTXT)
Dateiname = Dir
Loop
Application.ScreenUpdating = True
End Sub
Für jede Hilfe wäre ich sehr dankbar :)
Beste Grüße!

Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CSV Import mit VBA
29.08.2013 14:42:00
Ben
Hallo Hendrik,
was ist denn, wenn Du die "Meldung" ausschaltest:
Application.DisplayAlerts = False
Gruß, Ben
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

CSV Import mit VBA in Excel


Schritt-für-Schritt-Anleitung

  1. Code einfügen: Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten. Füge den folgenden Code in ein neues Modul ein:

    Sub CSV_Dateien_importieren()
        Dim wb As Workbook, wks As Worksheet, wbAktiv As Workbook, wksAktiv As Worksheet
        Dim rngZelle As Range
        Dim strVerzeichnis As String
        Dim Dateiname As Variant, DateinameTXT As String
        Const strZelleDatum As String = "A2"
        Const strBereich As String = "A2:B97"
        Const lngZeilenBereich As Long = 96
    
        Dateiname = Application.GetOpenFilename(FileFilter:="CSV (*.csv), *.csv", Title:="CSV-Datei im Verzeichnis auswählen")
        If Dateiname = False Then Exit Sub
        strVerzeichnis = VBA.CurDir
        Set wbAktiv = ActiveWorkbook
        Set wksAktiv = ActiveSheet
        Set rngZelle = wksAktiv.Cells(Rows.Count, 2).End(xlUp).Offset(1, 0)
        Dateiname = Dir(strVerzeichnis & Application.PathSeparator & "*.csv")
        Application.ScreenUpdating = False
    
        Do Until Dateiname = ""
            VBA.FileCopy Source:=Dateiname, Destination:=Left(Dateiname, Len(Dateiname) - 3) & "txt"
            DateinameTXT = Left(Dateiname, Len(Dateiname) - 3) & "txt"
            Application.Workbooks.OpenText Filename:=DateinameTXT, Origin:=xlWindows, StartRow:=1, _
            DataType:=xlDelimited, Semicolon:=True, DecimalSeparator:=".", ThousandsSeparator:=","
    
            Set wb = ActiveWorkbook
            wb.Sheets(1).Range(strBereich).Copy
            rngZelle.PasteSpecial Paste:=xlPasteValues
            wksAktiv.Range(rngZelle.Offset(0, -1), rngZelle.Offset(lngZeilenBereich - 1, -1)).Value = wb.Sheets(1).Range(strZelleDatum)
            Set rngZelle = rngZelle.Offset(lngZeilenBereich, 0)
            wb.Close savechanges:=False
            VBA.Kill (DateinameTXT)
            Dateiname = Dir
        Loop
    
        Application.ScreenUpdating = True
    End Sub
  2. Makro ausführen: Drücke F5, um das Makro auszuführen. Wähle das Verzeichnis aus, das die CSV-Dateien enthält, und klicke auf „Öffnen“.

  3. Meldungen unterdrücken: Um die Bestätigungsfragen beim Einfügen der Daten zu unterdrücken, füge die folgende Zeile in den Code ein:

    Application.DisplayAlerts = False

Häufige Fehler und Lösungen

  • Problem: Excel fragt nach dem Löschen der Zwischenablage.

    • Lösung: Stelle sicher, dass Application.DisplayAlerts = False im Code enthalten ist.
  • Problem: Daten werden nicht korrekt eingelesen.

    • Lösung: Überprüfe den Datenbereich strBereich, um sicherzustellen, dass er die richtigen Zellen umfasst.

Alternative Methoden

  • CSV Import automatisch: Du kannst auch Excel Makros verwenden, um CSV-Dateien automatisch in Excel zu importieren. Hierbei wird die Nutzung von Workbook.Open und Workbook.Close empfohlen.

  • Access verwenden: Wenn Du viele CSV-Dateien hast, kann es sinnvoll sein, Access zu verwenden. Hierfür gibt es VBA-Methoden, um CSV-Dateien direkt in Access zu importieren, was die Verarbeitung erleichtert.


Praktische Beispiele

  • CSV-Datei einlesen: Um eine CSV-Datei in Excel einzulesen, kannst Du den folgenden VBA-Code verwenden:

    Workbooks.Open Filename:="C:\Pfad\zur\deiner\datei.csv"
  • Daten in ein bestimmtes Blatt importieren: Wenn Du die Daten in ein bestimmtes Arbeitsblatt importieren möchtest, wähle das Arbeitsblatt vorher aus:

    Sheets("Blatt1").Activate

Tipps für Profis

  • Optimierung der Leistung: Verwende Application.ScreenUpdating = False und Application.Calculation = xlCalculationManual, um die Leistung beim Import von vielen CSV-Dateien zu optimieren.

  • Fehlerbehandlung: Implementiere eine einfache Fehlerbehandlung, um mögliche Laufzeitfehler zu erfassen und zu behandeln.

    On Error Resume Next

FAQ: Häufige Fragen

1. Wie kann ich mehrere CSV-Dateien auf einmal importieren? Du kannst das vorherige Makro so anpassen, dass es alle CSV-Dateien in einem bestimmten Verzeichnis durchläuft.

2. Was mache ich, wenn die Daten nicht richtig formatiert sind? Überprüfe die DataType-Einstellungen im OpenText-Befehl und passe die Separatoren an, um sicherzustellen, dass die Daten korrekt eingelesen werden.

3. Ist es möglich, CSV-Dateien aus der Zwischenablage einzufügen? Ja, Du kannst die Zwischenablage in Excel verwenden, um Daten direkt einzufügen, indem Du ActiveSheet.Paste verwendest, nachdem Du die Daten kopiert hast.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige