maxvonwies
Goto Top

Mittels .bat Datei Excel makro an mehreren Datein ausführen

Hallo,

ich erstelle gerade einen ganzen Haufen Protokolle (ca. 1000). Dafür habe ich bereits mehrere Makros geschrieben. Diese befinden sich (mittlerweile) in einer gesammelten Macrodatei (xlsm).
Da ich aber immer wieder Korrekturen an allen * 1000 .xls Dateien vornehmen muss, wäre es sinnvoll eine Möglichkeit zu finden ein Makro zu haben welches ich auf allen .xls Dateien anwenden kann. Das direkt über ein Makro zu realisieren habe ich jetzt auf mehreren Wegen bereits versucht und bin daran gescheitert -> habe vor 3 Wochen noch nicht mal gewusst wie man ein Makro ausführt ;)
Meine Überlegung also:

.bat Datei erstellen welche die Datei Mastermacro.xlsm aufruft
div. Ordner und Unterordner nach .xls Dateien absuchen
eine xls Datei nach der anderen aufmacht, das Makro aus Mastermacro.xlsm ausführt, xls Datei wieder schließen

ist das auf irgend eine Art möglich?! Bereits das ganze Internet abgesucht und nichts verwertbares gefunden...

Ich bin wohl nicht der einzige der 1000 Dateien überarbeiten will und da nicht jede einzeln durchklicken will...

Bonusdanksagungen gibt es, wenn mir einer verrät wie ich dem Mastermacro.xlsm noch sagen kann, dass es die Macros aus den zu bearbeitenden Dateien löschen soll... dafür habe ich nämlich auch keine brauchbare Lösung gefunden. Nur ein paar mal meine Mastermacro.xlsm geschrottet. erstellen einer xlsx Datei ist allerdings keine Lösung!

PS: bei den Kollegen könnte ich total "einedrahn" wenn man die Vorgänge sehen würde ;)

lg und besten Dank für eure Hilfe!

MaxvonWies

Content-ID: 619408

Url: https://administrator.de/contentid/619408

Ausgedruckt am: 25.11.2024 um 09:11 Uhr

GNULinux
GNULinux 05.11.2020 um 17:32:03 Uhr
Goto Top
Klingt als wäre Excel als dezentrales Tabellenkalkulationsprogramm das falsche Werkzeug dafür.
Macros kann man programmatisch mit Bibliotheken wie https://github.com/EPPlusSoftware/EPPlus oder wenns kommerziell sein soll Aspose.Cells bearbeiten. Da brauchst du dann entweder direkt C# oder wenns geskriptet sein soll PowerShell, nicht die alte CMD.
Meierjo
Meierjo 05.11.2020 um 17:34:58 Uhr
Goto Top
Hallo

Ist es wirklich nötig, jede Datei zu aktualisieren, oder würde es ausreichen, wenn du die Datei beim Öffnen aktualisierst?

Dann könntest du nämlich das Makro in deinem Excel-Startup Pfad speichern
Dann hast du das Makro in jeder Excel-Datei zur Verfügung.

Um es aufzurufen, kannst du ja zB einen Button im Menupfad hinterlegen

Gruss Urs
Fennek11
Fennek11 05.11.2020 um 18:23:33 Uhr
Goto Top
Hallo,

viele Dateien in einem Ordner zu bearbeiten, geht in VBA nach diesem Schema:

f = dir("c:\temp\*.xls?")  
do while f <> ""  
       ' hier die Befehle  
       ' z.B: set WB = Workbooks.Open(f)  
f = dir
loop 

Im Format xlsx wird ohne VBA gespeichert

mfg
MaxvonWies
MaxvonWies 06.11.2020 um 07:07:05 Uhr
Goto Top
Danke für deine Antwort!

leider kann ich mir das nicht aussuchen. Es handelt sich dabei um techn. Protokolle welche nur in Excel vernünftig umsetzbar sind. Mit der Powershell hätte ich kein Problem, mit C# allerdings schon ;) Ich bin eigentlich kein Programmierer, ich bin nur jemand der rund 1000 Protokolle erstellt und Fehler in den Protokollen ausbessert (Formatierungsfehler zb.). Diese sind allerdings in allen Protokollen gleich, ein vor und ein Nachteil. Vorteil weil ich es mit Makros wegbekomme, Nachweil weil es 1000 sind face-smile

lg
MaxvonWies
MaxvonWies 06.11.2020 um 07:10:10 Uhr
Goto Top
Hallo,

danke für die Antwort, ja leider ist es erforderlich die Datei selbst zu überarbeiten. Die vielen Dateien haben fehlerhafte Formatierungen, Formelfehler etc. Und ich möchte mir eben ersparen, jede Datei (ca. 1000) einzeln zu öffnen und ein Macro auszuführen. Natürlich wäre das auch eine Möglichkeit... Wenn auch etwas frustrierend :D

lg
MaxvonWies
MaxvonWies 06.11.2020 um 07:15:51 Uhr
Goto Top
Hallo,

das klingt vielversprechend. Allerdings liegen die Dateien in verschiedenen Unterordnern und müssten nach ".xls" sortiert werden. Die Ordnerstruktur ist ca. so aufgebaut:

Ordner 1
- Unterordnert 1
-- xls Unterordner (xls Dateien)
--pdf Unterordner (PDF Drucke)
- Unterordner 2
-- xls Unterordner (xls Dateien)
--pdf Unterordner (PDF Drucke)
-unterordner 3
-- xls Unterordner (xls Dateien)
--pdf Unterordner (PDF Drucke)

Ordner 2
- Unterordnert 1
-- xls Unterordner (xls Dateien)
--pdf Unterordner (PDF Drucke)
- Unterordner 2
-- xls Unterordner (xls Dateien)
--pdf Unterordner (PDF Drucke)
-unterordner 3
-- xls Unterordner (xls Dateien)
--pdf Unterordner (PDF Drucke)

Kannst du mir den o.g. Code etwas genauer erklären? Wenn ich ihn besser verstehe kann ich ihn ggf so anpassen, dass er funktioniert. Wie gesagt, ich bin leider recht neu bei Makros. Habe noch vor 3 Wochen nicht mal gewusst wie man die aufruft oder erstellt ;)
Fennek11
Fennek11 06.11.2020 um 08:12:41 Uhr
Goto Top
Solange es nur 1 Unterordner-Ebene gibt, ist das mit FSO recht einfach zu machen.

(Viele AV blockieren CreateObject("WScrip.Shell").excec("cmd dir /s c:\temp\*.xls?").stdout.readall
Für alternative rekursive Aufrufe sollte man mehr als Grundkenntnisse haben)

Siehe Dir "FSO" (FileScriptingObject) an, da gibt es die Methode "SubFolder".
MaxvonWies
MaxvonWies 06.11.2020 um 10:17:12 Uhr
Goto Top
Hallo,

ich habe mir überlegt, diese Variante nochmal zu versuchen. So viele Ordner sind es nicht, ich kann sie ja alle ins Macro reinschreiben. Allerdings bekomme ich bei Set WB = Workbooks.open (f) einen Fehler. ich denke diesen Befehl führe ich noch nicht richtig aus. Soll dieser Befehl die Dokumente alle gleichzeitig öffnen? Oder einzeln?

Fehlermeldung: wir konnten die Datei: "dann steht der erste Dateiname im Ordner" nicht finden. Wurde dieser geändert oder verschoben? Ganz falsch scheint es nicht zu sein ;)

Sub A_autokorrektur_starten()

f = Dir("dateipfad\dateipfad\*.xls")
Do While f <> ""
Set WB = Workbooks.Open(f)
Call Protokollkorrekturen
Call WP_LA_speichern
Call Blanko_WP_erstellen
f = Dir
Loop

' Call Protokollkorrekturen
' Call WP_LA_speichern
' Call Blanko_WP_erstellen

ActiveWorkbook.Close

End Sub
Fennek11
Fennek11 06.11.2020 um 10:29:48 Uhr
Goto Top
Workbook.Open(Pfad & file)

also (ungeprüft)
Dim WB as Workbook
Pfad = "c:\temp\" ' back-slash am Ende  
f = dir (Pfad & "*.xls?")  
set WB = Workbook.Open(Pfad & f)
' hier der Code  
WB.close 0
f = dir
MaxvonWies
MaxvonWies 09.11.2020 aktualisiert um 08:02:36 Uhr
Goto Top
nice, ganz klappt es aber noch nicht. Bei Set WB gibt er den Fehler WB = Nothing aus. Pfad passt allerdings. Wofür ist eigentlich das ? in ".xls?". Auch ohne ? bekomme ich den gleichen Fehler ;) Also daran liegts wohl nicht... Eigentlich ein Simpler Code... aber bekomme ihn nicht zum Laufen

Sub A_IP_autokorrektur_starten()

Dim WB As Workbook
Pfad = "G:\Pfad\Pfad\" ' back-slash am Ende
f = Dir(Pfad & "*.xls?")
Set WB = Workbook.Open(Pfad & f)
' hier der Code


Call Protokollkorrekturen

'____________________________pdf erzeugen_____________________
Call IP_PDF_speichern


Call IP_Blanko_erstellen

WB.Close 0
f = Dir

End Sub