Anzeige
Archiv - Navigation
1148to1152
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-Dateien mit VBA einlesen

CSV-Dateien mit VBA einlesen
Stefan741
Hallo VBA-Freunde,
gestern habe ich fast den ganzen Tag gesucht und ausprobiert, aber keine Lösung für meine Problemstellung gefunden (bzw. war ich nicht in der Lage, eine vorhandene Lösung umzubauen, dass sie lief):
In einem Verzeichnis stehen viele CSV-Dateien. Die Daten sind mit Komma getrennt.
Diese möchte ich in eine Excel-Tabelle einlesen:
In die erste Spalte soll in jede Zeile der Dateiname geschrieben werden. In die weiteren Spalten und Zeilen dann die Daten. Eine Kommatrennung entspricht dann einer neuen Spalte.
Die Daten der nächsten Datei soll einfach unter die vorherige angefügt werden.
Habe schon versucht, das als Makro aufzuzeichnen und den Dateinamen variabel zu machen, bin aber gescheitert:
Dim Pfad As String
Dim Datei As String
Dim i As Integer
Dim alt As Variant, neu As Variant
With Application.FileSearch
.LookIn = "K:\Testverzeichnis\"
.Filename = "*.CSV"
If .Execute > 0 Then
For i = 1 To .FoundFiles.Count
alt = .FoundFiles(i)
neu = Mid(.FoundFiles(i), 66)
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;K:\Testverzeichnis\" _
& neu, Destination:=Selection)
' im aufgezeichneten Code steht hier der ganze Verzeichnis- und
' Dateiname. Ich habe versucht, dies variabel zu gestalten
.Name = neu
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(2, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
' .Refresh BackgroundQuery:=False
End With
Cells(64000, 1).End(xlUp).Select
Next i
End If
End With
End Sub
Hat von euch schon mal wer so eine Lösung erarbeitet? Könnte mir da jemand weiterhelfen?
Danke im Voraus,
Stefan

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
doppelt .. CSV-Dateien mit VBA einlesen
24.03.2010 08:02:11
Mike
Gruss
Mike
offen .. CSV-Dateien mit VBA einlesen
24.03.2010 08:02:43
Mike
... nicht beide geschlossen.. ;-)
AW: offen .. CSV-Dateien mit VBA einlesen
24.03.2010 08:26:43
Stefan741
Ich kann euch versichern, dass ich nur 1x eingestellt habe. Dann bin ich zurück zum Forum und habe den Browser aktualisiert. Aber es waren 2 Einträge drin.
Keine Ahnung, was ich falsch gemacht habe. Einem Schreiber vor mir ist es aber auch so gegangen.
Würde sagen, wir schreiben hier weiter.
AW: offen .. CSV-Dateien mit VBA einlesen
24.03.2010 09:21:10
Heiko
Hallo Stefan,
z.B. so. Und ohne Filesearch läuft es auch unter Office 2007:
Sub CSV_Import()
Dim strPfad As String
Dim lngLastRow As Long
Dim myFileSystemObject, myFiles
' Pfad hier anpassen
strPfad = "C:\Copy\Neuer Ordner (2)\"
Set myFileSystemObject = CreateObject("Scripting.FileSystemObject")
For Each myFiles In myFileSystemObject.GetFolder(strPfad).Files
If InStr(UCase(myFiles), ".CSV") Then
lngLastRow = ActiveSheet.Cells(65535, 2).End(xlUp).Row
ActiveSheet.Cells(lngLastRow + 1, 1) = myFiles
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & myFiles, Destination:=Range(Cells(lngLastRow + 2, 1), Cells(lngLastRow +  _
2, 1)))
.Name = myFiles
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End If
Next myFiles
End Sub
Gruß Heiko
Anzeige
AW: gelöst .. CSV-Dateien mit VBA einlesen
24.03.2010 10:08:34
Stefan741
Hallo Heiko,
vielen Dank für deine Hilfe, der Code funktioniert super! Das erspart eine Menge Arbeit.
Ein klein wenig habe ich ihn abgeändert, weil ich die Dateinamen links neben der ersten CSV-Zeile haben möchte:
Sub CSV_Import()
Dim strPfad As String
Dim lngLastRow As Long
Dim myFileSystemObject, myFiles
' Pfad hier anpassen
strPfad = "K:\Stoffverbote\Stoffinformationen Zulierferware\test umbenennen\"
Set myFileSystemObject = CreateObject("Scripting.FileSystemObject")
For Each myFiles In myFileSystemObject.GetFolder(strPfad).Files
If InStr(UCase(myFiles), ".CSV") Then
lngLastRow = ActiveSheet.Cells(65535, 2).End(xlUp).Row
ActiveSheet.Cells(lngLastRow + 1, 1) = myFiles
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & myFiles, Destination:=Range(Cells(lngLastRow + 1, 2), Cells(lngLastRow +  _
1, 2)))
.Name = myFiles
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End If
Next myFiles
End Sub
Ich muss mir noch eine Routine bauen, um das Verzeichnis und die Endung zu entfernen und den verbleibenden Text in die leerzellen zu schreiben.
Viele Grüße
Stefan
Anzeige
AW: gelöst .. CSV-Dateien mit VBA einlesen
24.03.2010 10:34:02
Heiko
Hallo Stefan,
da braucht es nicht viel:
Diese Zeile
ActiveSheet.Cells(lngLastRow + 1, 1) = myFiles
so ändern, fertig.
ActiveSheet.Cells(lngLastRow + 1, 1) = Split(myFiles.Name, ".")(0)
Gruß Heiko
AW: gelöst .. CSV-Dateien mit VBA einlesen
24.03.2010 13:15:57
Stefan741
Hallo Heiko,
das "da brauchts nicht viel" gilt für dich, leider aber nicht für mich. Ich habe mich jetzt lange rumgequält, bis ich folgenden code gebastelt hatte:
Sub Pfad_entfernen()
Dim LastRow As Long, FirstRow As Long
Dim i As Long, Länge As Long
Dim Nummer As String
FirstRow = Cells(1, 1).End(xlDown).Row
LastRow = Cells(65535, 2).End(xlUp).Row
For i = FirstRow To LastRow
Länge = Len(Cells(i, 1)) - 75
Nummer = Mid(Cells(i, 1), 72, Länge)
Cells(i, 1).Value = Nummer
Next
End Sub
Trotzdem danke für die codezeile, werde natürlich deinen viel einfacheren Vorschlag verwenden.
Die Nummern lass ich jetzt so reinkopieren:
Sub Artikenummer_kopieren()
Dim LastRow As Long, FirstRow As Long
Dim i As Long
FirstRow = Cells(1, 1).End(xlDown).Row
LastRow = Cells(65535, 2).End(xlUp).Row
For i = FirstRow To LastRow - 1
If Cells(i + 1, 1).Value = 0 Then
Cells(i + 1, 1).Value = Cells(i, 1).Value
End If
Next
End Sub
Gruß
Stefan
Anzeige

324 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige