Excel Ansicht
#1
Hallo ihr fleissigen helfenden Hände!

Nachdem ich ja endlich meine Lagerverwaltung in den Griff bekommen habe, habe ich jetzt folgendes Problem:

Wenn ich meine Lagerverwaltung und Excel schließe (hier ist ja alles komplett ausgeblendet oberhalb des Tabellenblattes) und eine neue Datei öffne ist das komplette Interface nicht sichtbar.

Im Moment löse ich das so:

Lagerverwaltung öffnen. Alt+F8 -> Entwicklermodus ausführen (Interface wird eingeblendet) ->andere Datei öffnen


Aber das kann ja keine dauerhafte Lösung sein. Woran liegt das und wie kann ich das Problem beheben?

Screenshots anbei.
Ratlose Grüße  Huh 

Tanja


Angehängte Dateien Thumbnail(s)
       
Antworten Top
#2
Hallo Tanja,

Zitat:Wenn ich meine Lagerverwaltung und Excel schließe (hier ist ja alles komplett ausgeblendet oberhalb des Tabellenblattes) und eine neue Datei öffne ist das komplette Interface nicht sichtbar.

tja, da hast du es dir vielleicht etwas zu einfach gemacht. Es gilt eigentlich die goldene Regel, daß alle globalen Änderungen der Anwendung auch wieder beim Beenden komplett rückgängige gemacht werden, was hier offensichtlich versäumt worden ist.

Knobbi38
Antworten Top
#3
Okay. Danke für die Info. Aber das hilft mir hier jetzt natürlich erstmal nicht weiter.

Eine Lösung dafür wäre super.
Antworten Top
#4
Hallo Tanja,

schau mal ins Modul "Diese Arbeitsmappe". Da findest du die Eventprozedur Private Sub Workbook_Open().
Darin befinden sich entweder ein Link zur relevanten Prozedur oder die Befehle, wo was auch immer alles abgeschalten wird.

Packe das in den Code Tag dieses Editors, damit man sieht was alles wieder aktiviert/eingeschaltet werden muss.
Das "Einschalten" wird über die Ereignisprozedur Private Sub Workbook_Deactivate() erledigt. Vielleicht hilft dir das ja schon weiter.


Gruß Uwe
Antworten Top
#5
@Egon12:
Meintest du "WorkbookDeactivate" oder "WorkbookBeforeClose" ?



Zitat:Eine Lösung dafür wäre super.

Wenn du solche Dinge ausblendest, solltest du eigentlich auch wissen, wie und was wieder einblendet werden sollte.

Ohne deinem Code ist eine konkrete Hilfestellung kaum möglich.

Knobbi38
Antworten Top
#6
richtig ist natürlich Workbook_BeforeClose.
 
Aber ich habe gerade vom vorherigen Thread die Datei runtergeladen. Da steht fast alles drin. Es fehlt lediglich der Aufruf zu "Entwicklermodus".

siehe Modul "DieseArbeitsmappe"
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Worksheets("Startseite").Select
ThisWorkbook.Save
Call Entwicklermodus    ' dieser Aufruf ist erforderlich
End Sub

Gruß Uwe
Antworten Top
#7
Ich habe den Thread nicht verfolgt, ein Link wäre dann angebrachter.  😉

Unabhängig davon, ist doch ein Aufruf des Entwicklermodus keine Lösung für so ein Problem, finde ich zumindest.

Viellicht so?
Code:
Application.ExecuteExcel4Macro "Show.Toolbar(""Ribbon"",true)"
Application.DisplayFormulaBar = True

und mit 
Code:
Application.CommandBars.ExecuteMso "MinimizeRibbon"

könnte man das Ribbon "tooglen" und um die Höhe zu ermitteln:
Code:
? Application.CommandBars("Ribbon").Height

Hängt aber alles so ein bißchen davon ab, was im WorkbookOpen gemacht wird oder ob es ein CustomizedRibbon gibt.


Knobbi38
Antworten Top
#8
Klar, besser ist es gar nicht erst abschalten.

Gruß Uwe
Antworten Top
#9
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
  1. 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.
  2. 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
      Code:
      Application.Quit
      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
    Code:
    Application.Quit
    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.
Antworten Top
#10
Hallo WS-53,

im Prinzip sind deine Überlegungen ja richtig, aber dass würde bedeuten, dass alle anderen Workbooks automatisch .xlsm Dateien sein müssten.

Mit so einer "Diktator-App" sollte man diese nur alleine laufen lassen und weitere parallele Instanzen wenn möglich vermeiden. Vielleicht könnte man so einen, wie von dir beschriebenen Workflow eventuell in ein AddIn auslagern. Fragt sich nur, ob sich der Aufwand dafür lohnt. 

Grundsätzlich halte ich das für ein hausgemachtes Problem, weil hier m.M.n. ein falsches Tool verwendet wird. Für eine Lagerverwaltung würde ich eher eine Datenbankanwendung verwenden, womit dann auch automatisch eine Mehrbenutzerfähigkeit einhergeht.  

Gruß Knobbi38
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste