Discussion:
Makro auf mehrere tausend Excel Dateien anwenden?
(zu alt für eine Antwort)
Martin Christoph
2003-09-21 23:31:38 UTC
Permalink
Hallo,

ich suche nach einer Möglichkeit in mehreren tausend Excel Dateien, die
alle die gleiche Struktur haben Veränderungen per Makro vorzunehmen.

Z.B. sollen in allen Dateien, die in einem bestimmten Verzeichnis liegen
alle angegebenen DM Werte in Euro konvertiert werden oder ein bestimmter
Text gesucht und ersetzt werden.

Das Makro für eine einzelne Datei zu schreiben ist im Prinzip nicht das
Problem, ich würde eben gerne das eine Makro auf alle Dateien einmal
anwenden. Wenn möglich ohne die Dateien alle vorher zu öffnen denn bei über
tausend Dateien auf einmal kann man das eigentlich auch schon lassen...

Ich bin für jeden Hinweis dankbar.

MfG
Martin Christoph
Thomas Ramel
2003-09-22 05:33:51 UTC
Permalink
Grüezi Martin
Post by Martin Christoph
ich suche nach einer Möglichkeit in mehreren tausend Excel Dateien, die
alle die gleiche Struktur haben Veränderungen per Makro vorzunehmen.
Z.B. sollen in allen Dateien, die in einem bestimmten Verzeichnis liegen
alle angegebenen DM Werte in Euro konvertiert werden oder ein bestimmter
Text gesucht und ersetzt werden.
Das Makro für eine einzelne Datei zu schreiben ist im Prinzip nicht das
Problem, ich würde eben gerne das eine Makro auf alle Dateien einmal
anwenden. Wenn möglich ohne die Dateien alle vorher zu öffnen denn bei über
tausend Dateien auf einmal kann man das eigentlich auch schon lassen...
Hmm, wenn das Makro steht und korrekt läuft, brauchst Du bloss noch einen
Schleife, die über alle Mappen einse Verzeichnisses läuft, jede öffnet und
dann jeweils dein Makro aufruft, anschliessend die Mappe
speichert/schliesst und die nächst aufruft.

Ohe die Mappen zu öffnen (über Code) kannst Du deren Inhalt nicht verändern.

Die folgenden Makros generieren einen Verzeichnisbaum ab einem angegebenen
Pfad. Mit entsprechender Veränderung kannst Du sie für deine Zwecke
verwenden und den Aufruf deines Makros einbauen:

Public Sub AufrufVerzeichnis()
'Generiert das Folder-Objekt für den Verzeichnisbaum
'Verweis auf die 'Microsoft Scripting Runtime' setzen
Dim fso As New FileSystemObject
Dim fld As Folder
Set fld = fso.GetFolder("C:\Schlesinger")
Verzeichnisbaum fld
End Sub

Public Sub Verzeichnisbaum(fld As Folder, Optional i As Long = 0)
'Listet alle Unterverzeichnisse und Dateien eines Startverzeichnisses auf
'Der Aufruf erfolgt rekursiv, daher die Aufrüf-Sub
Dim subfld As Folder, Flag As Boolean, fil As File
Flag = True
For Each fil In fld.Files
If Flag Then Worksheets(1).Range("A1").Offset(i, 0) =
fil.ParentFolder.path
Worksheets(1).Range("A1").Offset(i, 1) = fil.Name
Worksheets(1).Range("A1").Offset(i, 2) = fil.DateCreated
i = i + 1
Flag = False
Next
For Each subfld In fld.SubFolders
Verzeichnisbaum subfld, i
Next
End Sub
--
Mit freundlichen Grüssen

Thomas Ramel
- MVP für Microsoft-Excel -

[Win 2000Pro SP-4 / xl2000 SP-3]
Martin Christoph
2003-09-22 18:52:49 UTC
Permalink
Post by Thomas Ramel
Die folgenden Makros generieren einen Verzeichnisbaum ab einem angegebenen
Pfad. Mit entsprechender Veränderung kannst Du sie für deine Zwecke
[...]
Danke für den Tip, ich mache es jetzt aber etwas anders:

Sub m2ed()
'Öffnen aller Dateien im angegebenen verzeichnis...
Dim fs, f, f1, fc, s
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder("C:\excel_test")
Set fc = f.Files

'aktueller Dateiname: f1 (hier beginnt die schleife)
For Each f1 In fc

'aktuelle Datei öffnen
Workbooks.Open Filename:=f1

'Aktion, die auf jede Datei angewandt wird (z.B. ersetzen)
Cells.Replace What:="1234", Replacement:="asdf"

'Datei speichern und schließen
ActiveWorkbook.Close SaveChanges:=True

'Ende der Schleife
Next
End Sub

Das von dir angegeben Makro hat übrigens direkt nicht funktioniert. Die
Ausführung wird bei mir immer in der Zeile
Public Sub Verzeichnisbaum(fld As Folder, Optional i As Long = 0)
mit der Fehlermeldung "Benutzerdefinierter Typ nicht definiert"
abgebrochen. Da ich mich erst seit zwei Tagen mit Excel beschäftigt habe
kann ich mit dieser Meldung leider gar nichts anfangen.

Die Zeilen
If Flag Then Worksheets(1).Range("A1").Offset(i, 0) =
fil.ParentFolder.path
habe ich übrigens zu einer Zeile zusammengefügt.

MfG
Martin Christoph
Thomas Ramel
2003-09-22 19:08:47 UTC
Permalink
Grüezi Martin
Post by Martin Christoph
Post by Thomas Ramel
Die folgenden Makros generieren einen Verzeichnisbaum ab einem angegebenen
Pfad. Mit entsprechender Veränderung kannst Du sie für deine Zwecke
Das war auch der Sinn der Scche.
Es freut mich, dass Du dir Gedanken dazu gemacht hast und aufgrund des
Ansatzes eine eigene Lösung finden konntest.
Sie entspricht übrigens dem, was ich mir vorgestellt hatte.
Post by Martin Christoph
Das von dir angegeben Makro hat übrigens direkt nicht funktioniert. Die
Ausführung wird bei mir immer in der Zeile
Public Sub Verzeichnisbaum(fld As Folder, Optional i As Long = 0)
mit der Fehlermeldung "Benutzerdefinierter Typ nicht definiert"
abgebrochen. Da ich mich erst seit zwei Tagen mit Excel beschäftigt habe
kann ich mit dieser Meldung leider gar nichts anfangen.
Das zweite Makro kann nicht direkt gestartet werden, da es einen
Übergabeparameter erwartet, den es vom ersen Makro bekommt.
Post by Martin Christoph
Die Zeilen
If Flag Then Worksheets(1).Range("A1").Offset(i, 0) =
fil.ParentFolder.path
habe ich übrigens zu einer Zeile zusammengefügt.
Das ist auch richtig so; der Umbruch kam vermutlich durhc den Newsreader
zustande.

Danke auch für deien Rückmeldung.
--
Mit freundlichen Grüssen

Thomas Ramel
- MVP für Microsoft-Excel -

[Win 2000Pro SP-4 / xl2000 SP-3]
Loading...