Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

per VBA Mappe schließen und überschreiben

Forumthread: per VBA Mappe schließen und überschreiben

per VBA Mappe schließen und überschreiben
24.02.2026 14:33:15
Morris6781
Hallo zusammen,

ich versuche eine "Aktualitätsprüfung" zweier Arbeitsmappen durchzuführen und möchte folgendes:

Beim Öffnen der ersten Mappe, soll geprüft werden, ob diese jünger ist, als die Vorlage. Ist die Vorlage jünger, soll die erste Mappe geschlossen werden (ein Überschreiben einer geöffneten Mappe ist ja nicht möglich) und die zweite Mappe den Namen (und Pfad) der ersten bekommen, diese faktisch mit saveas überschreiben. Die Inhalte der älteren Mappe werden vorher übergeben. Übergabe funktioniert problemlos, nur das Speichern unter nicht.

Das Makro der zweiten Mappe läuft solange durch, bis die erste per Anweisung geschlossen wird. In beiden Mappen steht der selbe Code.

Mit application.run funzt es auch nicht.

Hier der sehr vereinfachte Code:


Private Sub Workbook_Open()
AktualitätPrüfen
End Sub

Sub AktualitätPrüfen()
Pfad = ActiveWorkbook.Worksheets("Tabelle1").[A3]
If ActiveWorkbook.Worksheets("Tabelle1").[A1].Value = "Vorlage" Then
Set wb = Workbooks("Mappe2.xlsm")
With wb.Worksheets("Tabelle1")
WBName = .Range("A2")
Pfad = .Range("A3")
End With
Workbooks(WBName).Close SaveChanges:=False 'ohne Speichern schließen
ActiveWorkbook.Worksheets("Tabelle1").[A1].ClearContents 'den Eintrag "Vorlage" löschen
wb.SaveAs Filename:=Pfad & WBName
Exit Sub
Else
Workbooks.Open Filename:=Pfad & "Mappe2.xlsm"
'Application.Run "Mappe2.xlsm!AktualitätPrüfen"
End If
End Sub


Ich komm nicht weiter. Vielleicht habt ihr eine Lösung.

Danke im Voraus
Gruß
Morris
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: per VBA Mappe schließen und überschreiben
24.02.2026 15:00:05
daniel
Hi

der Ablauf müsste folgender sein:
Makro Mappe1:
1. Aktualität prüfen
2. neuere Vorlage öffnen
3. Daten übergeben
4. Makro der Vorlage mit Application.Ontime aufrufen, dabei den Dateinamen als Parameter übergeben

Makro Vorlage:
1. Datei Mappe1 schließen
2. Datei Mappe1 löschen
3. Sich selbst unter dem Namen der Mappe 1 speichern.

Wichtig wäre, dass du zum Start Application.Ontime verwendest und nicht Application.Run
damit wird das aufgerufene Makro nicht sofort aufgerufen, sondern erst dann, wenn das erste Makro vollständig abgearbeitet ist.
Damit kannst du dann von der Vorlage aus die Mappe1 schließen und löschen, ohne in laufende Prozesse einzugreifen.

Gruß Daniel
Anzeige
AW: per VBA Mappe schließen und überschreiben
25.02.2026 00:24:58
xlKing
Hi,

ich würde da etwas anders rangehen und schlage ein AddIn vor, welches über Application.Events beim Öffnen einer bestimmten Mappe (z.B. Mappe1.xlsx) diese über das FileSystemObject mit der Vorlage vergleicht. Ist die Vorlage jünger, kann diese, ebenfalls über das FileSystemObject, nach dem Schließen von Mappe1 an deren Ort kopiert und umbenannt werden. Allerdings habe ich vor der Umsetzung noch ein paar Rückfragen.

- Ist die Vorlage, mit der die Mappe verglichen wird immer am selben Ort und unter dem selben Namen abgelegt? Falls nicht, mit was soll die geöffnete Mappe dann verglichen werden?
- Gibt es bestimmte Keys, z.B. ein bestimmter Name der zu vergleichenden Mappe, damit der Vergleich und die Überspeicherung nicht mit jeder beliebigen Mappe passiert, sondern nur mit den gewollten?
- Welche Werte sollen aus der älteren Mappe in die jüngere Vorlage übernommen werden? Und macht das überhaupt Sinn, Daten aus der älteren in die jüngere zu nehmen?
- soll die Überspeicherung auch umgekehrt gelten? Also, dass eine jüngere Mappe1 die ältere Vorlage überschreibt - Stichwort: Synchronisieren!

Gruß Mr. K.
Anzeige
AW: per VBA Mappe schließen und überschreiben
25.02.2026 16:19:58
Moriis6781
@xlKing

Ist die Vorlage, mit der die Mappe verglichen wird immer am selben Ort und unter dem selben Namen abgelegt? Falls nicht, mit was soll die geöffnete Mappe dann verglichen werden?
-> Die Mappe Vorlage ist immer am selben Ort, der Name der Vorlage bleibt gleich. Es soll die Version der Datei verglichen werden, nicht direkt das Änderungsdatum.

- Gibt es bestimmte Keys, z.B. ein bestimmter Name der zu vergleichenden Mappe, damit der Vergleich und die Überspeicherung nicht mit jeder beliebigen Mappe passiert, sondern nur mit den gewollten?
-> Der Name der "alten" Mappe ist individuell und kann durch den Benutzer beliebig geändert werden.

- Welche Werte sollen aus der älteren Mappe in die jüngere Vorlage übernommen werden? Und macht das überhaupt Sinn, Daten aus der älteren in die jüngere zu nehmen?
-> Es werden die gesamten bisher eingegebenen Daten der "alten" Mappe übernommen - die Vorlage ist leer. Faktisch geht es um einen Urlaubsplaner, der bei jedem Öffnen prüft, ob eine aktuellere Version der Datei existiert. Hintergrund ist die Überarbeitung der Vorlage u.a. Hinzufügen neuer Schaltflächen, anderes Layout, abstellen von Bugs und ähnliches. Aktuell schicke ich die neue Version immer per Mail, was zu Problemen führt, wenn diese nicht genutzt wird, insbesondere da ich in den Kinderschuhen der Programmierung per VBA stecke und noch nicht alles überblicken oder durchspielen kann. Hinzu kommen Änderungswünsche durch den Nutzer.

- soll die Überspeicherung auch umgekehrt gelten? Also, dass eine jüngere Mappe1 die ältere Vorlage überschreibt - Stichwort: Synchronisieren!
-> Die umgekehrte Überspeicherung soll nicht stattfinden, wenngleich eine Synchronisation - wenn wir das Gleiche meinen - auch sinnhaft klingt.

Gerne probiere ich auch das FileSystemObject aus, wenn die Funktionsweise meinen Ereignishorizont nicht übersteigt. Bei Bedarf kann ich ja mal den Urlaubsplaner hochladen, um zu veranschaulichen, was ich meine. Ist (für mich) etwas komplexer und geht sicher auch einfacher, nur learning bei doing - ich muss verstehen, was der Code bedeutet und übernehme nicht ohne das nötige Verständnis für das, was ich an Code schreibe.

Danke auf jeden Fall im Voraus für deine Gedankengänge.

Grüße
Anzeige
AW: per VBA Mappe schließen und überschreiben
24.02.2026 16:20:26
Morris6781
@Daniel:

Das klingt schon nach dem, was ich suche, nur wie binde ich das Ganze ein? .ontime kannte ich bisher noch nicht und erfordert nach erster Recherche immer eine Zeitangabe, die mir als solche nicht bekannt ist. Nun könnte ich 3 Sekunden annehmen, in der Hoffnung, dass unser langsames System bis dahin das Ursprungsmakro fertig ausgeführt hat und ontime starten kann. Vielleicht habe ich auch einfach nur einen Denkfehler. Oder fällt dir noch eine gänzlich andere Lösung für das Problem ein?

und nochmal Danke für deine schnelle Antwort.
Anzeige
AW: per VBA Mappe schließen und überschreiben
24.02.2026 18:04:26
daniel
Hi
als Zeitangabe einfach NOW (aktuelle Zeit).
ein mit Application.OnTime aufgerufenes Makro wartet mit der Ausführung, bis das laufende Makro abgeschlossen ist.
dh auch wenn das laufende Makro etwas länger benötigt, startet das mit Ontime aufgerufene Makro erst, wenn alles fertig ist.
das ist der Unterschied zu application.run
Gruß Daniel
Anzeige
AW: per VBA Mappe schließen und überschreiben
25.02.2026 16:21:35
Morris6781
@ Daniel:

Das probiere ich zeitnah aus und bin gespannt, was passiert.

Ich gebe definitiv eine Rückmeldung, sobald ich mich ausprobieren konnte.

Danke und Gruß
Morris

Forumthreads zu verwandten Themen

Anzeige