Abschalten beim öffnen und anschalten beim schließen, dürfte das Problem aber noch nicht vollständig lösen. Denn wenn ein Anwender parallel eine 2. Mappe öffnet, dann ist wohl immer noch der Zustand "Abgeschaltet" aktiv?
Wäre es da nicht besser, eine Mappe zu haben, die beim Starten eine neue Instanz startet und in dieser neuen Instanz dann die eigentliche Anwendung startet? Wobei ich nicht weiß, ob sich das mit Excel realisieren lässt. Aber laut Copilot soll es funktionieren.
Copilot hat meine Vermutungen bestätigt und erklärt, wie es funktionieren sollte:
Hier meine Fragen, sowie die Antworten von Copilot:
Lässt sich mit Excel folgendes realisiern? Ich öffne eine .xlsm. Bei Workbook_open startet diese eine neue Excel-Instanz um in dieser eine weitere .xlsm zu starten, die eine Apllikation darstellt und selbst beim öffnen alles (Ribbons,...) ausblendet, was in dieser Instanz nicht benötigt wird. Beim schließen der 2. Mappe soll dann such automatisch die hierfür zuvor geöffnete neue Instanz geschlossen werden.
Ja, Wilfried – das lässt sich mit VBA grundsätzlich umsetzen, aber es erfordert ein paar saubere Steuerungsmechanismen, weil Excel-Instanzen voneinander unabhängig laufen. Ich skizziere dir den Ablauf und die Stolperfallen:
🧭 Ablaufidee
- Workbook_Open-Ereignis in deiner ersten .xlsm
- Dort erzeugst du eine neue Excel-Instanz (
Code:
CreateObject("Excel.Application")
).
- In dieser Instanz öffnest du die zweite .xlsm (deine „Applikation“).
- Optional:
Code:
Application.Visible = True/False
und Anpassungen wie Ribbon ausblenden.
- In der zweiten .xlsm (Applikation)
- Beim Öffnen blendest du Menüs, Ribbons etc. aus.
- Beim Schließen (
Code:
Workbook_BeforeClose
) prüfst du, ob die Instanz, in der du läufst, geschlossen werden soll.
- Dann rufst du
auf, um die gesamte Instanz zu beenden.
⚠️ Stolperfallen
- Referenzverlust: Die erste Mappe muss sich merken, welche Instanz sie gestartet hat. Sonst bleibt die zweite Instanz nach dem Schließen im Hintergrund offen.
- Sicherheit: Manche Einstellungen wie Ribbon-Ausblendung sind global für die Instanz – das wirkt dann auch auf andere Dateien, die in derselben Instanz geöffnet würden.
- Benutzererlebnis: Wenn du die zweite Instanz unsichtbar startest, musst du bewusst steuern, wann sie sichtbar wird.
💡 Beispielcode (vereinfacht)
In der ersten .xlsm:
vba
Code:
Private Sub Workbook_Open()
Dim xlApp As Object
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
xlApp.Workbooks.Open "C:\Pfad\DeineApp.xlsm"
' xlApp kann in einer globalen Variablen gespeichert werden
End Sub
In der zweiten .xlsm:
vba
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.Quit
End Sub
🧠 Fazit
- Ja, technisch möglich.
- Wichtig: Die zweite Mappe muss selbst ihre Instanz schließen, sonst bleibt sie hängen.
- Du solltest eine globale Referenz auf die erzeugte Instanz halten, damit du sie sauber beenden kannst.
👉 Willst du, dass ich dir ein
vollständiges Musterprojekt mit beiden Dateien (Startmappe + Applikationsmappe) als Codegerüst aufzeige, damit du es direkt nachvollziehen kannst?
Verständnisfrage: Wenn ich es nicht über eine separate Instanz realsiere, dann wird doch jede andere Mappe, die ich öffne solange die Excel-App geöffent wird, mit genau den Ausblendungen meiner App geöffnet?
Genau, Wilfried – das ist der entscheidende Punkt:
Wenn du
keine separate Instanz startest, sondern deine „App‑Mappe“ einfach in der bestehenden Excel‑Sitzung öffnest, dann gelten alle Änderungen, die du dort per VBA vornimmst (z. B. Ribbon ausblenden, Menüs deaktivieren, Statusleiste ausschalten),
global für diese Excel‑Instanz.
🔍 Konsequenzen
- Öffnest du danach eine andere Arbeitsmappe in derselben Instanz, sieht sie genauso „abgespeckt“ aus – also ohne Ribbon, ohne Menüleisten usw.
- Erst wenn du die App‑Mappe wieder schließt und im Code die Änderungen zurücksetzt, wird die normale Oberfläche wiederhergestellt.
- Falls du das Zurücksetzen vergisst oder es fehlerhaft läuft, bleibt Excel für alle Mappen „verstümmelt“.
✅ Lösung durch separate Instanz
- Startest du die App in einer eigenen Excel‑Instanz, wirken die Ausblendungen nur dort.
- Deine normale Excel‑Sitzung bleibt unverändert.
- Beim Schließen der App‑Mappe kannst du die Instanz gezielt mit
beenden – und damit verschwinden auch die Ausblendungen automatisch.
🧠 Fazit
Ohne separate Instanz sind die Ausblendungen
global und betreffen alle geöffneten Mappen. Mit einer separaten Instanz kapselst du die Änderungen und vermeidest Nebenwirkungen.