[Makro] Mehrere CSV Dateien öffnen

Hallo,

ich will aus einem Verzeichnis 9 .csv Dateien in einer Mappe, aber in 9 verschiedenen Worksheets öffnen. Bis jetzt habe ich es nur geschafft, 9 verschiedene Mappen zu öffnen, kann mir vielleicht jemand helfen?

Hier ist mein Code:

Sub Test()
Application.ScreenUpdating = False
With Application.FileSearch
.NewSearch
.Filename = „*.csv“
.LookIn = „C:“

If .Execute > 0 Then
Dim file
Dim i As Integer
Dim Mappe As Workbook
For Each file In .FoundFiles
i = i + 1
Application.StatusBar = "Working on " & file
Set Mappe = Workbooks.Open(file, UpdateLinks:=0)
.
.
. usw.

Kann ich hier die Variable Mappe als Worksheet definieren? Wie kann ich zu einem Worksheet verschiedene Dateien zuordnen, mit Worksheets.Add?

Für jede Hilfe wäre ich sehr dankbar.
Unr3al

ich will aus einem Verzeichnis 9 .csv Dateien in einer Mappe,
aber in 9 verschiedenen Worksheets öffnen. Bis jetzt habe ich
es nur geschafft, 9 verschiedene Mappen zu öffnen, kann mir
vielleicht jemand helfen?

Hallo ?,
ungetestet:

Sub Test()
Application.ScreenUpdating = False
Dim Datei
Dim i As Integer, zei As Long, sp As Integer
Dim anz As Byte
With Application.FileSearch
 .NewSearch
 .Filename = "\*.csv"
 .LookIn = "C:\"
 If .Execute \> 0 Then
 Application.SheetsInNewWorkbook = .FoundFiles.Count
 Workbooks.Add
 Application.SheetsInNewWorkbook = 3
 For Each Datei In .FoundFiles
 zei = 0
 i = i + 1
 Application.StatusBar = "Working on " & Datei
 Open Datei For Input As #1
 While Not EOF(1)
 Input #1, Satz
 Satz2 = Split(Satz, ",")
 zei = zei + 1
 For sp = 0 To UBound(Satz2)
 ActiveWorkbook.Worksheets(i).Cells(zei, sp + 1) = Satz2(sp)
 Next sp
 Wend
 Close
 Next Datei
 End If
End With
Application.ScreenUpdating = True
End Sub

Gruß
Reinhard

Hier ist mein Code:

Sub Test()
Application.ScreenUpdating = False
With Application.FileSearch
.NewSearch
.Filename = „*.csv“
.LookIn = „C:“

If .Execute > 0 Then
Dim file
Dim i As Integer
Dim Mappe As Workbook
For Each file In .FoundFiles
i = i + 1
Application.StatusBar = "Working on " & file
Set Mappe = Workbooks.Open(file,
UpdateLinks:=0)
.
.
. usw.

Kann ich hier die Variable Mappe als Worksheet definieren? Wie
kann ich zu einem Worksheet verschiedene Dateien zuordnen, mit
Worksheets.Add?

Für jede Hilfe wäre ich sehr dankbar.
Unr3al

Hallo Reinhard,

vielen Dank erst einmal für die Hilfe. Die Dateien werden jetzt in einer Mappe aufgemacht, allerdings wird der Inhalt in einer Spalte dargestellt. Als Beispiel, die .csv-Datei sind so aus:

Stunde,Montag,Dienstag,Mittwoch,Donnerstag,Freitag
Mathe,Deutsch,Englisch,Mathe,Kunst

Also wird es im Excel wie folgt dargestellt:

Stunde
Montag
Dienstag
Mittwoch
Donnerstag
Freitag
Mathe
Deutsch
Englisch
Mathe
Kunst

Weiß jemand woran es liegen könnte und was man am Code ändern soll, damit es richtig dargestellt wird?

Vielen Dank im Voraus.

ich will aus einem Verzeichnis 9 .csv Dateien in einer Mappe,
aber in 9 verschiedenen Worksheets öffnen. Bis jetzt habe ich
es nur geschafft, 9 verschiedene Mappen zu öffnen, kann mir
vielleicht jemand helfen?

Hallo ?,
ungetestet:

Sub Test()
Application.ScreenUpdating = False
Dim Datei
Dim i As Integer, zei As Long, sp As Integer
Dim anz As Byte
With Application.FileSearch
.NewSearch
.Filename = „*.csv“
.LookIn = „C:“
If .Execute > 0 Then
Application.SheetsInNewWorkbook = .FoundFiles.Count
Workbooks.Add
Application.SheetsInNewWorkbook = 3
For Each Datei In .FoundFiles
zei = 0
i = i + 1
Application.StatusBar = "Working on " & Datei
Open Datei For Input As #1
While Not EOF(1)
Input #1, Satz
Satz2 = Split(Satz, „,“)
zei = zei + 1
For sp = 0 To UBound(Satz2)
ActiveWorkbook.Worksheets(i).Cells(zei, sp

    1. = Satz2(sp)
      Next sp
      Wend
      Close
      Next Datei
      End If
      End With
      Application.ScreenUpdating = True
      End Sub

Gruß
Reinhard

Hallo ?,
kann irgendwie nicht sein vom Code her.
Mit #Input #1, Satz# wird jede Datei Zeilenweise ausgelesen, nach #Satz2 = Split(Satz, „,“)# ist jede Zeile aufgesplittet am Komma,also aus #Stunde,Montag,Dienstag# wird #Satz2(0)=Stunde#, #Satz2(1)=Montag#,#Satz(2)=Dienstag#.
Die Syntax von Cells ist Cells(Zeile,Spalte)
In der For-Schleife wird der Spaltenzähler sp in #Cells(zei,sp)# laufend erhöht und Satz2(0) in Spalte 1, Satz2(1) in Spalte 2, Satz(2) in Spalte 3 geschrieben.

Füge mal nach #Satz2 = Split(Satz, „,“)# folgendes ein:
msgbox Satz
msgbox Satz2(0)
msgbox Satz2(1)

und poste hier was passiert.
Gruß
Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Reinhard,

Füge mal nach #Satz2 = Split(Satz, „,“)# folgendes ein:
msgbox Satz
msgbox Satz2(0)
msgbox Satz2(1)

und poste hier was passiert.

Ich habe es gemacht und Folgendes ist passiert. Es hat sich zuerst ein Dialog(?) geöffnet, in dem Stunde drinstand und ein „OK“-Button. Wenn ich OK gedrückt habe, hat sich noch ein Dialog geöffnet mit dem gleichem Inhalt. Wenn ich wieder auf OK gedrückt habe, meckert der Editor und zwar an dieser Stelle:

MsgBox Satz2(1)

Und zwar sagt er, dass Index außerhalb des gültigen Bereichs ist.

Hoffe, du kannst mir trotzdem noch helfen.

Viele Grüße,
Unr3al

Hi Unr3al,
ich habe es jetzt ausgetestet, der Code funtioniert perfekt.
Ich weiß jetzt nicht warum es bei dir nicht klappt.
Öffne mal die csv-Dateien mit Notepad, Wordpad und schaue nach dem Trennungszeichen ob es das ist wie bei Split.
Nachfolgend nochmal der funktionierende Code.
Gruß
Reinhard

Sub Test()
Application.ScreenUpdating = False
Dim Datei
Dim i As Integer, zei As Long, sp As Integer
Dim anz As Byte
With Application.FileSearch
 .NewSearch
 .Filename = "\*.csv"
 .LookIn = "C:\"
 If .Execute \> 0 Then
 Application.SheetsInNewWorkbook = .FoundFiles.Count
 Workbooks.Add
 Application.SheetsInNewWorkbook = 3
 For Each Datei In .FoundFiles
 zei = 0
 i = i + 1
 Application.StatusBar = "Working on " & Datei
 Open Datei For Input As #1
 While Not EOF(1)
 Input #1, Satz
 Satz2 = Split(Satz, ",")
 zei = zei + 1
 For sp = 0 To UBound(Satz2)
 ActiveWorkbook.Worksheets(i).Cells(zei, sp + 1) = Satz2(sp)
 Next sp
 Wend
 Close
 Next Datei
 End If
End With
Application.ScreenUpdating = True
End Sub