Tabellen in einem Verzeichnis nacheinander öffnen

Hallo zusammen,

ich möchte mit einem Makro alle Excel-Mappen in einem Verzeichnis nacheinder öffnen und dann etwas daraus kopieren.
Nun weiss ich aber weder Namen noch Anzahl der Excel-Mappen…
Geht dies auch mit Zahlen? Also so in der Art „zähle die Mappen in XXX und öffnen dann von der ersten bis zur letzten etc.“
Geht sowas vielleicht mit Workbook(1) vielleicht?

Vielen Dank schonmal!

Hallo Brille,

alle Excel-Mappen in einem Verzeichnis öffnen, geht so:

Sub öffnen()
 Dim datei As String

 ChDir "C:\MeineExcelDateien" ' Pfad anpassen
 datei = Dir("\*.xls\*")
 Do While datei ""
 Workbooks.Open datei
 datei = Dir
 Loop
End Sub

Was du genau mit dem Kopieren meinst, weiß ich nicht.

Gruß, Andreas

Hallo zusammen,

ich möchte mit einem Makro alle Excel-Mappen in einem
Verzeichnis nacheinder öffnen und dann etwas daraus kopieren.

Hallo Andreas,

Was du genau mit dem Kopieren meinst, weiß ich nicht.

Das mit dem Kopieren hab ich schon fertig, geht eigentlich nur darum diese Excel-mappen zu öffnen. Werds mal mit dem Code probieren, danke schonmal!
Aber gibt es eine Möglichkeit, die einzeln und nacheinander zu öffnen?
Wenn ich Exceltabellen in einer Mappe activieren will gibt es ja einen Index, also Worksheets(1) das erste, Worksheets(2) das zweite etc., egal wie sie heißen.
Gibt es sowas auch für die Mappen in einem Ordner?
Hoffe du verstehst was ich meine…

MfG

das gibt es nur für die bereits geöffneten mappen (soweit ich weiß). aber nimm den geposteten code-schnippsel, häng in die schleife noch deinen code zum kopieren und zum datei schließen und gut is

Geht nicht :frowning:

Sub öffnen()
Dim datei As String

ChDir „C:\MeineExcelDateien“ ’ Pfad anpassen
datei = Dir("*.xls*")
Do While datei „“
Workbooks.Open datei
datei = Dir
Loop
End Sub

Hallo nochmal,

wollt den Code jetzt ausprobieren, aber irgendwie klappt der nicht…
Hab ihn so kopiert und den Pfad ersetzt (aus Explorer kopiert, also ohne Tippfehler). Irgendwie kann er „datei“ nichts zuordnen und springt sofort aus der Schleife. Irgendwelche Ideen, woran das liegen könnte? Hab ich da noch was vergessen?

Danke schonmal!

Aber gibt es eine Möglichkeit, die einzeln und nacheinander zu
öffnen?
Wenn ich Exceltabellen in einer Mappe activieren will gibt es
ja einen Index, also Worksheets(1) das erste, Worksheets(2)
das zweite etc., egal wie sie heißen.
Gibt es sowas auch für die Mappen in einem Ordner?
Hoffe du verstehst was ich meine…

MfG

Hallo Brille,

mach es so ähnlich wie Jens sagt. Hier mein etwas erweiterter Code:

Sub öffnen()
 Dim datei As String

 ChDir "C:\MeineExcelDateien" ' Pfad anpassen
 datei = Dir("\*.xls\*")
 Do While datei ""
 Workbooks.Open datei
' Hier deinen Code zu Kopieren einfügen
 Workbooks(datei).Close SaveChanges:=True
 datei = Dir
 Loop
End Sub

Gruß, Andreas

kann ich so nicht sagen. Geh mal mit F8 die Einzelschritte durch und kuck, wo was passiert.

Gruß, Andreas

So, hab mal was ausprobiert.
Kann es sein, dass er bei Netzlaufwerken ein Problem hat?
Hab einen Test-Ordner lokal (C:smile:erstellt und da hats geklappt. Hab den Ordner auf unser Netzlaufwerk gestellt (S:smile: und dies auch im Code so hinterlegt, da klappts nicht mehr…
Muss ich den Code da noch irgendwie verändern oder andere Ordnereinstellungen machen?

MfG

Hallo,

zu diesem Zweck gibt es das FilesystemObject.

Mit der Methode
.Path(pathname) stetzt man den Pfad,
.Files holt man sich die Dateiliste , die man dann mittels „for each … next“ abarbeiten kann.

Schau mal in die VB(A) Hilfe, dort gibts auch CodeBeispiele. (rtfm)

Tschau
Peter

Habs gefunden, muss wohl noch ChDrive „S“ davor, um das Laufwerk zu ändern, dann klappts.

Danke!

Hallo Peter,

danke für den Tipp, werd ich mir mal durchlesen.

MfG

Mappen per Index ansprechen

Habs gefunden, muss wohl noch ChDrive „S“ davor, um das
Laufwerk zu ändern, dann klappts.

Hallo B.,

gewöhn dir an chdrive vor chdir zu benutzen wenn du chdir in einem Code zum ertsen Mal benutzt. Du weißt ja nie (ohne es zu prüfen) welces grad
das aktuelle LW ist bei programmstart.
Wechselst du dann im Code nur noch die Ordner mit chdir dann brauchste es da imo nicht
Aber wechselst du mit Chdir das Laufwerk würde ich vorher wieder chdrive benutzen.

Denn ohne chdrive nur mit chdir zu „arbeiten“ kann schiefgehen wie du ja wohl gemerkt hast.

Und, wenn du unbedingt die Mappen mit Index ansprechen willst.
Mit nachfolgendem Code geht das. Du kannst dann jede mappe entweder über den Index oder ihrem Namen ansprechen
Also so

MsgBox colMappe(1)
MsgBox colMappe(„61023.xls“) 'Namen anpassen

Option Explicit

Sub Oeffnen()
Dim Mappe As String, colMappe As New Collection, M As Long
Const Pfad As String = "C:\Test\"
Mappe = Dir(Pfad & "\*.xls\*")
Do While Mappe ""
 colMappe.Add key:=Replace(Mappe, Pfad, ""), Item:=Replace(Mappe, Pfad, "")
 ' Hier deinen Code zu Kopieren einfügen
 Mappe = Dir
Loop
'Alle Mappen öffnen
For M = 1 To colMappe.Count
 Workbooks.Open Pfad & colMappe(M)
Next M
'Alle Mappen schließen
For M = 1 To colMappe.Count
 Workbooks(colMappe(M)).Close savechanges:=False 'oder True
Next M
MsgBox colMappe(1)
MsgBox colMappe("61023.xls")
End Sub

Gruß
Reinhard

Hallo Reinhard,

hab ChDir noch nicht benutzt, werd ich mir merken.
Code werd ich nochmal ausprobieren, hatte jetzt noch eine andere Lösung für mich gefunden. Ich lese das Verzeichnis aus, schreibe die Dateinamen in eine Extratabelle und bearbeite sie dann von oben nach unten:

Range(„A1“).Select
With Application.FileSearch
.NewSearch
.LookIn = verz
.SearchSubFolders = False
.FileType = msoFileTypeAllFiles
.Execute
For i = 1 To .FoundFiles.Count
ActiveCell.Value = .FoundFiles(i)
ActiveCell.Offset(1, 0).Select
Next i

(hatte ich so im Netz irgendwo gefunden)

Vielen Dank erstmal für die Lösungsvorschläge, wieder was gelernt.

Schönes Wochenende schonmal!

Code werd ich nochmal ausprobieren, hatte jetzt noch eine
andere Lösung für mich gefunden. Ich lese das Verzeichnis aus,
schreibe die Dateinamen in eine Extratabelle und bearbeite sie
dann von oben nach unten:

Range(„A1“).Select
With Application.FileSearch

Hallo B.,

tjanun, sich jetzt mit FileSearch anzufreunden da kommst du um etliche Jahre zu spät.
FileSearch hat vor einigen Jahren von MS einen gravierenden Nachteil verpasst bekommen deshalb wird es aussterben.

Es funktioniert nicht in Versionen 2007 und 2010 usw.
Weil es den Befehl dort nicht mehr gibt.

Natürlich kannst du es in 2002 , 2003 benutzen solang du lustig bist denn es ist kein schlechter Befehl und auch leicht zu erlernen mit seinen Argumenten wie SearchSubFolders=True/False u.v.m.

Ist nur blöd wenn du jetzt viel Code schreibst mit filesearch und dann wird auf 2010 gewechselt…
Kannst von mir aus mit „Dir“ an die Sache gehen, oder wenn du die Treffer gleich nach Datum oder Größe oder namen o.ä. sortiert haben willst kannst du ja FAQ:3267 anschauen.

Aber ich seh grad, bei Gelegenheit müßte ich da im Code dann doch etwas mehr Codezeilen kommentieren :smile:

Zu deinem Code, ich würde ihnggfs. so schreiben:

Sub tt()
Dim i As Long
Columns("A").ClearContents
With Application.FileSearch
 .NewSearch
 .LookIn = "c:\test"
 .SearchSubFolders = False
 .FileType = msoFileTypeExcelWorkbooks
 .Execute
 For i = 1 To .FoundFiles.Count
 Range("A" & i) = .FoundFiles(i)
 Next i
End With
End Sub

Gruß
Reinhard