(C) 2009 - 2021 by Mourad Louha · Alle Rechte vorbehalten

Mehrere unabhängige Excel 2013 Instanzen aufrufen

Mit Excel 2013 wurde das sogenannte Multiple Document Interface (MDI) durch ein Single Document Interface (SDI) ersetzt. Dies bedeutet, dass jede einzelne Mappe nun in einem eigenem Fenster geladen wird und nicht, wie z.B. bei Excel 2010 mehrere Mappen in einem Hauptfenster zu sehen sind.

Neben den Änderungen an der Oberfläche ist zudem ein weiteres Verhalten von Excel 2013 zu beobachten. So wird, falls bereits eine Excel Instanz geöffnet ist, standardmäßig diese Instanz verwendet, sobald Sie beispielsweise Excel 2013 erneut über das Programmsymbol aufrufen.

Schauen wir uns dazu zunächst das Verhalten von Excel 2010 an, welches ich zweimal über einen Doppelklick auf das Programmsymbol in Windows 7 aufgerufen habe.

Microsoft Excel 2013

Sie sehen, es tauchen zwei Prozesse in der Liste auf, die beide voneinander unabhängig sind. Zu sehen sind auch die beiden Fensterhandles XLMAIN, die jeweils das Hauptfenster von Excel 2010 darstellen.

Schauen wir uns nun zweimaligen Aufruf von Excel 2013 unter Windows 7 an. Zu sehen sind nun zwei aktive XLMAIN Fensterhandles, die die jeweiligen Excel 2013 Fenster repräsentieren.

Microsoft Excel 2013

Ein inaktives drittes Fensterhandle XLMAIN ist übrigens auch im unteren Bereich zu sehen. Was es mit diesem dritten Handle auf sich hat, werde ich zu einem späteren Zeitpunkt in einem eigenem Artikel untersuchen.Nachtrag: der Artikel ist nun hier Vergleich der Fensterverwaltung zwischen Office 2010 und Office 2013 erschienen.

In manchen Situationen kann es jedoch sehr sinnvoll sein, mehrere Excel Instanzen aufzurufen. Zum Beispiel, wenn Sie eine umfangreiche Auswertung mit längeren Berechnungszeiten fahren möchten und in der Zwischenzeit mit weiteren Excel Daten weiterarbeiten möchten. Eine einzelne Instanz wäre durch die Berechnungen blockiert.

In Windows 7 bzw. Windows 8 lässt sich eine neue Instanz starten, indem Sie beim Anklicken des Programmsymbols die Alt-Taste gedrückt halten. Das klappt, wenn die Anwendung an die Taskleiste angeheftet wurde oder durch einen Aufruf über das Startmenü im Programmordner (Windows 7), nicht jedoch mit einer Verknüpfung auf der Taskleiste, die die Eigenschaften aufruft. Excel fragt zudem nach, ob eine neue Instanz gestartet werden soll.

Microsoft Excel 2013

Excel 2013 bietet zudem einen Kommandozeilenparameter an, um eine neue Instanz zu öffnen. Wenn Sie beispielsweise im Suchfeld von Windows 7 den Begriff „excel.exe /x“ eingeben und die Enter-Taste drücken, startet Excel 2013 in einer neuen Instanz. Eine Rückfrage erfolgte nicht. Und, falls Sie mehrere Excel Versionen parallel installiert haben sollten, empfiehlt sich zudem den vollständigen Pfad zu der gewünschten Excel Version anzugeben.

Als Alternative, gerade in den Fällen von Parallelinstallationen, bietet sich an, eine Verknüpfung zu Excel 2013 auf dem Desktop anzulegen und dort den Parameter anzugeben.

Microsoft Excel 2013

Abschließend ein Hinweis zu dem von mir eingesetzten Tool zur Visualisierung der Prozesse und Fensterhandles. Für die beiden ersten Screenshots im Artikel kam das Open Source Tool Windows Detective zu Einsatz. Dieses bietet, in ähnlicher und auch erweiterter Form zu Microsoft Spy+ aus dem Visual Studio Paket, die Möglichkeit einzelne Abhängigkeiten von Fenstern und Komponenten einzusehen und sogar zu modifizieren. Natürlich unter Berücksichtigung, dass solche Manipulationen nicht auf einem Echtsystem stattfinden sollten.

 

 
Comments
Christoph Ernst

Hallo Mourad
Besten Dank für diese Information. Mich beschäftigt noch ein weiterer Zustand mit zwei Instanzen. Ist es möglich, mit zwei Instanzen z.B. einen Sverweis zu benutzen? Resp. kann dies in der regedit als Default Wert gesetzt werden?

Besten Dank für deinen wertvollen Input.
Beste Grüsse
Christoph

Hallo Christoph,

vielen Dank, freut mich, dass die Infos hilfreich sind.

Um auf Deine Frage zu kommen, ausprobiert hatte ich es nicht. Was ich aber jetzt sehe, ist dass beide Instanzen anscheinend nichts voneinander wissen, was ja auch logisch wäre. Wenn ich beispielsweise einen SVERWEIS innerhalb einer Instanz zu einer anderen Datei (z.B. Kunden.xlsx) herstelle, kann ich per Maus den Bereich auswählen. Instanzübergreifend geht das natürlich nicht. Auf der anderen Seite kann ich aber die Kundendatei natürlich in einer zweiten Instanz öffnen. Das stört nicht, aber eine Änderung führt dazu, dass dies in der Datei mit dem SVERWEIS nicht aktualisiert wird. Auch nicht per F9 oder Daten aktualisieren. Bei mir funktioniert nur in die Formel reingehen und Enter drücken bzw. über Daten -> Verknüpfungen, Werte aktualisieren.

Beste Grüße

Hallo Mourad,

wenn du per VBA von einer Excelmappe auf eine andere Excelmappe zugreifen willst, dann geht dies für normalsterbliche nur, wenn sich beide Mappen in einer Instanz befinden. Insofern ist das neue standardmäßige Verhalten von Excel 2013, nämlich jede Mappe die geöffnet wird in einem neuen Fentster, jeder in der laufenden Instanz zu öffnen, grundsätzlich besser als das bisherige.

Hat nähmlich der User einer VBA-Anwendung versehentlich die 2 Mapen, die miteinander kommunizieren sollten, in 2 verschiedenen Insatanzen geöffnet, dann erhält er eine Fehlermeldung, mit der er nichts anfangen kann.

Dieses Risiko ist nun geringer. Noch besser wäre es aber, wenn Microsoft ordentlich beschreiben würde (Für normalos verständlich), wie instanzübergreifend Daten ausgetauscht werden können.

VG,
Wilfried

Hallo Wilfried,

vielen Dank. Ja, im Normalfall dürfte es sicherlich ausreichend sein, die Mappen in derselben Instanz zu öffnen. Es gibt aber auch Situationen – wie z.B. umfangreiche Abfragen – wo eine zweite Instanz sinnvoll ist, um die erste nicht zu blockieren. Den Fall habe ich ab und zu bei PowerPivot-Abfragen oder auch umfangreicheren Berechnungen in VBA, wo das dann im Hintergrund läuft.

Viele Grüße, Mourad

Hallo,

ich hätte eine Gegenfrage: Kann ich Excel 2013 dazu zwingen, sich wie Excel 2010 zu verhalten und mehrere Dateifenster in einem Programmfensterzu öffnen? Das würde mir zu etwas mehr Übersicht auf dem Bildschrim verhelfen (Mehrere Dateifenster, die übersichtlich nebeneinanderliegen).

VG,
Achim

Hallo Achim,

leider nein, keine Chance. Der SDI-Modus (1 Dokument pro Fenster) ist in Excel 2013 fest eingebaut.

Viele Grüße, Mourad

Hallo Mourad,

ich wollte eigentlich eine andere Antwort, aber trotzdem danke…

Viele Grüße
Achim

Hallo,
habe dies hier mir großem Interess gelesen und der Parameter /x hat mir und vor allem meinen Kollegen die Lust an Excel gerettet.
Was mich noch interessiert ist, wie eine XLS*-Datei durch Doppelklick im Explorer immer in einer eigenen Instanz gestartet wird. Wir arbeiten mit mehreren Excel-Dateien gleichzeitig und deren Trennung hebt die Performance ganz entscheident.

schon vorab vielen Dank und viele Grüße,
Peter

Hallo Peter,

vielen Dank. Was Deine Frage betrifft, da musste ich selber suchen. Im Netz sind einige Anleitungen zu finden, die einen Eingriff in die Registry voraussetzen. Beispielsweise Open each spreadsheet in a new instance of Excel 2010 oder How-to Open Each Excel Spreadsheet in a New Instance. Ob dies allerdings auch zuverlässig mit Excel 2013 funktioniert, kann ich Dir leider nicht sagen. Einerseits kann es m.E durchaus von der Rechnerkonfiguration abhängen, andererseits meine ich mal gelesen zu haben, dass es nicht immer klappt. Wenn Du Änderungen an den Einträgen in der Registry vornimmst, empfiehlt es sich zuvor die geplanten Änderungen zu sichern oder vorherigen Werte zu notieren. Hoffe, das hilft weiter.

Viele Grüße, Mourad

Hallo Mourad,

herzlichen Dank für die schnelle Antwort. Ich gehe Deinen Hinweisen mal nach und experimentiere damit. Dazu leiste ich mir den Luxus einer vituellen Maschine, falls was in die Hose geht. Wenn ich etwas verwerbares gefunden habe, werde ich hier posten.

Bis dahin und herzliche Grüße,
Peter

Hallo Peter,

gerne. Supi, wenn Du Deine Ergebnisse hier auch bekannt machen würdest :-)

Herzliche Grüße, Mourad

Hallo Mourad,

ich hoffe Du kannst mir sagen ob ich mit meinem Problem in der richtigen Richtung suche wenn ich die oben beschriebene Änderung von 2010 zu 2013 als „Ursache“ vermute.

Über ein Makro in einer Excel-Datei werden zwecks komplexer Auswertungen 70 (in Worten siebzig) weitere Excel-Dateien geöffnet die untereinander mehr oder weniger verknüpft sind. Das funktioniert (mit natürlich wachsendem Volumen) seit Office 97 bis inkl. Office 2010 wunderbar (ob es vernünftig ist lassen wir mal offen). Macht man das mit Office 2013 öffnet er die Dateien noch aber dann verläuft sich das System in „keine Rückmeldung“ und ist nicht bedienbar.
Vergleichbare Konstruktionen mit bis zu 30 Dateien funktionieren auch mit 2013, nur das Konstrukt mit 70 will nicht.

Ich vermute das irgendwelche (Sicherheits-/Prüffunktionen in 2013 bei der Dateimenge überfordert sind) siehst Du eine Chance, dass eine offizielle Supportanfrage an Microsoft eine Lösung bringen würde? das es eine „Einstellung“ gibt die 2013 dazu bringt sich so verträglich wie 2010 zu verhalten?

Viele Grüße
Michael

Hallo Michael,

mir wäre keine von Excel 2013 gesetzte Grenze bekannt, was das Öffnen von Dateien betrifft. Auch Einstellungen dazu wären mir nicht bekannt. Könnte mir aber vorstellen, dass Excel 2013 ab einer bestimmten Anzahl soviel RAM frisst, dass Windows dann das mal beendet bzw. es als nicht reagierend einstuft. Da Excel 2013 ja jedesmal alle Elemente eines Fensters (Ribbon, usw.) lädt, dürfte das schon einiges an Ressourcen verbrauchen. Könntest mal im Taskmanager schauen, wenn Du 30 Dateien geladen hast (Code break setzen), wie die Auslastung ist.

Wenn ich das richtig sehe, lädst Du alle Dateien und lässt diese offen. Vielleicht wäre eine Idee, es per Code zu begrenzen. Also sowas wie einen Zähler einzubauen, der wenn X erreicht ist die ersten Dateien wieder schließt; jedesmal, bevor der Code eine neue öffnet.

Ob das Verhalten von Excel 2013 in diesem Fall fehlerhaft ist, kann ich so nicht beurteilen. Und ob sich dann eine (kostenpflichtige?) Support-Anfrage lohnt, schwierig zu sagen. Meine persönliche Einschätzung wäre aber, da es sich um ein recht ungewöhnliches Szenario handelt, dass der Support das nicht ändern wird.

Viele Grüße, Mourad

Ist es möglich, Excel so einzustellen, das es automatisch wieder in mehreren Instanzen geöffnet wird. Das heißt wenn ich mehrere Excel Dateien nach einander öffne, sollen diese alle in eigenen Instanzen geöffnet werden, ohne das ich immer erst Excel mit /x öffnen muss und dann dort über Datei öffnen gehen muß.
Haben hier einige Problem seit Excel 2013 welche alle daran liegen, das Excel in ein und der selben Instanz alle Dateien öffnet.

Hallo Michael,

per Einstellung, nicht dass ich wüsste. Ob ein Registry-Hack hilft, kann ich nicht mit Sicherheit sagen, da nie ausprobiert. Es gibt da zwar Artikel, wie z.B. hier http://dottech.org/26491/how-to-force-microsoft-excel-to-open-files-in-new-window-how-to-guide/, die sich aber auf ältere Excel Versionen als 2013 beziehen. Und ob dann da der Parameter /x funktionieren würde oder Excel 2013 sich wieder wie 2010 verhält, auch nicht ausprobiert. Hinweis: Backups der Registry-Zweige sind bei Änderungen Pflicht.

Gruß

Hallo Mourad,

unter Excel 2016 scheint das nicht mehr zu funktionieren. Hast Du ggf. einen Lösungsvorschlag für Excel 2016?

VG Jörg

Mourad Louha

Hallo Jörg,

auf meinem Rechner mit Windows 7 habe ich in die Taskleiste eine Verknüpfung gelegt, wo für Excel 2016 drin steht „C:\Program Files (x86)\Microsoft Office\root\Office16\EXCEL.EXE“ /x was bei mir klappt. Excel wird in zwei unabhängigen Instanzen geöffnet; zumindesten im Sysinternals Process Explorer erscheinen diese als zwei Instanzen.

Was bei mir auch geht, ist Excel 2016 bei gedrückter Alt-Taste zu starten. Man wird dann gefragt, ob eine neue Instanz gestartet werden soll.

Falls das bei Dir nicht geht, welches Windows hast Du?

Viele Grüße, Mourad

Hallo Mourad,
ich hoffe ich bin hier auf der richtigen Spur.
Ich habe in Excel Makros programmiert welches letztlich ein Tool für die Arbeit bieten und es Kunden nutzten. Leider funktionieren bestimmte Makros ab Excel 2013 nicht mehr. Mein Glück ist, dass noch nicht alle Kunden Excel 2013 haben. Ist aber nur eine Frage der Zeit.
In den Makros soll der Kunde sich durch Formulare durcharbeiten wo im Hintergrund weitere Excel Dateien geöffnet werden um Inhalte zu lesen oder zu schreiben. Das aktuelle Problem mit Excel 2013 ist wohl, dass beim Öffnen einer weiteren Excel Datei durch das Makro, die durch public initialisierten Größen im Formular ihre Werte verlieren und somit Folgefunktionen nicht mehr gehen. Werden die Werte der lokalen Variablen verloren weil die anderen Dateien in separaten Instanzen geöffnet werden?
Hast du mir einen Tipp?
Kann man über ein bestimmtes Makro-Befehl die Dateien auf eine andere weise öffnen, so das lokale Variablen nicht ihren Wert verlieren.
Ich stehe relativ unter druck und wäre für eine zeitnahe Antwort sehr dankbar.

MfG Alex

Hallo Mourad,
muss die obere Beschreibung korrigieren. Die Werte der public-Variablen gehen verloren wenn eine andere Excel-Datei mit Windows(„xxx“).Close savechanges:=False oder True geschlossen wird. d. h. bis zu, Schließbefehl funktioniert fast alles.

Weiterer neuer Effekt, nur ab Excel 2013, ist dass die Bildschirmaktualisierung nicht mehr richtig greift:
Application.ScreenUpdating = False ‚Schaltet den Bildschirm aus
In jedem Formular und Modul wird zu beginn die Bildschirmaktualisierung deaktiviert und am Ende wieder aktiviert. Aber dies scheint nicht mehr zu funktionieren, auch nicht wenn
Application.EnableEvents = False zusätzlich gesetzt wird.
Ich vermute, dass im ersten Formular es funktioniert, aber da das Formular eine weitere Exceldatei öffnet, geht diese Einstellung verloren…
Könnte also auch was mit den Instanzen zu tun haben?

MfG Alex

Hallo Alex,

wenn Du die Dateien per Code öffnest, werden diese normalerweise in derselben Instanz geöffnet, auch wenn Du zwei Fenster siehst. Das kannst Du z.B. im TaskManager sehen. Öffne mal z.B. aus Deinem Code heraus die Dateien und setze einen Haltepunkt zum Stoppen. Im TaskManager solltest Du nur ein „Excel.exe“ sehen. Somit sollten lokale Variablen eigentlich nicht ihren Wert verlieren. Unabhängig dessen, Variablen beziehen sich auf die Datei, die den Code beinhaltet. Möchtest Du die Var’s in den Dateien verwenden, die du öffnest? Da ich Deinen Code nicht sehen kann, kann ich nicht beurteilen, ob da nicht noch andere Effekte greifen. Wenn Du möchtest, kannst Du mir gerne an die im Impressum genannte E-Mail-Adresse eine anonymisierte Version Deiner Datei zusenden. Dann schaue ich es mir mal an – allerdings kann das ein paar Tage dauern.

Was die Bildschirmaktualisierung betrifft, ja da gibt’s wohl ein paar Bugs, soweit ich informiert bin. Sollte aber nicht zum Verlust der Variablenwerte führen bzw. Auswirkungen auf andere Codeteile.

Grüße, Mourad

Guten Tag Mourad,
ich arbeite mit Excel 2016 und Windows 7, bin aber kein Excelexperte. Nun möchte ich mehr als eine Excel-Instanz öffnen. Hintergrund ist, dass ich mit einer Exceldatei, mit hinterlegtem Macro, zwischendurch Berechnungen durchführen lasse, eine oder mehrere weitere Excelinstanzen geöffnet bleiben soll. Mit dem Erfolg, dass die restlichen Exceldateien, durch das aktiviren den Macros geschlossen werden. Bei der Vorgängerversion 2013 war dies nicht der Fall. Kann dies evtl. mit der Verwendung von Microsoft OneDrive zusammen hängen?
Über eine Rückmeldung freue ich mich.
Vielen Dank
Grüsse
Martin

Hallo Martin

wenn ich das richtig verstehe, ist es dann so, dass bei Dir die anderen Instanzen durch das Makro geschlossen werden? Das sollte nicht sein und wundert mich, denn ein Makro hat normalerweise keinen Zugriff auf andere "echte" Instanzen.

Lege Dir mal eine Verknüpfung zu Excel auf dem Desktop an, wo Du dann in den Eigenschaften der Verknüpfung den Parameter /x angibst. Das sieht dann bei mir z.B. so aus: "C:\Program Files (x86)\Microsoft Office\root\Office16\EXCEL.EXE" /x.

Wenn Du dann Excel normal startest plus dem Makro und ein weiteres Excel über einen Doppelklick auf die Verknüpfung auf dem Desktop öffnest, besteht das Problem dann weiterhin? Falls Nein, dann alles gut. Falls Ja, dann könnte es doch am Add-In liegen und Du müsstest mehr zu dem Add-In erzählen, z.B. was es genauer macht.

Viele Grüße,
Mourad

Hallo Mourad,
super, es funktioniert :-))
Ich habe mehrere Exceldateien über die Verknüpfung geöffnet, danach die Exceldatei mit Makro gestartet.
Und siehe da, keine der geöffneten Dateien kam die Abfrage ob die geöffneten Dateien geschlossen werden sollen (Schliessen/Abbrechen) nicht mehr. Gleiches wenn ich alle alle Exceldateien (inkl. der mit Makro) über die angepasste Verknüpfung öffne. Kann es doch mit dem Makro zusammen hängen?
Nochmals herzlichen Dank für den prompten Support.
Schöne Grüsse
Martin

Hallo Martin,

prima, dass das jetzt klappt. Wenn Du Excel öffnest (egal jetzt wie) und z.B. eine weitere Datei aus diesem Excel öffnest, ist es diesselbe Instanz – obwohl zwei Fenster zu sehen sind. Das kannst Du z.B. im TaskManager oder besser ProcessExplorer von Sysinternals (Googlen) überprüfen.

Der Parameter /x erstellt eine echte neue Instanz, d.h. dass auch zwei Excel.exe im TaskManager auftauchen. Wenn Dein Makro jetzt versucht, per Code alle Dateien zu schließen, hat dieses normalerweise nur Zugriff auf alle geöffneten Fenster derselben Excel-Instanz. Von der zweiten Instanz weiss es erstmal nichts, da diese unabhängig voneinander laufen.

Das Verwenden der Desktop-Veknüpfung würde ich dann empfehlen, wenn Du auch zwei Excels brauchst. Und, dann neue Dateien per Öffnen-Menü öffnen, ein Doppelklick auf eine Datei kann dazu führen, dass es in der ersten Instanz geöffnet wird.

Viele Grüße,
Mourad

Guten Morgen Mourad,
vielen Dank für deinen Tip und die prompte Unterstützung. Ich werde es zukünftig wie von dir empfohlen anwenden.
Herzliche Grüssse
Martin

Hallo zusammen,
ich habe da auch noch ein Problem mit Excel 2013.
Ich habe ein Sehr großes Programm in Excel 2010 geschrieben was auch wunderbar funktioniert aber jetzt mit 2013 eben nicht mehr: Das Problem ist das ich über mehrere UserFormen eine Datei öffne die dann auch aktiv ist aber die UserForm nur in der ersten Datei aktiv ist. Wie kann ich eine Datei öffnen und die UserForm da zur Weiterverarbeitung aktivieren ??
Vielen Dank für die Hilfe,
Gerd

Hallo Gerd,

ich bin mir nicht sicher, ob ich Deine Problematik 100 Prozent verstanden habe. Wenn Du jedoch eine Datei per UserForm öffnest, kennst Du ja den Dateinamen und kannst im Code dementsprechend über Workbook(„Dateiname“) auf die geöffnete Mappe referenzieren bzw. etwas in der Datei durchführen.

Auf ActiveWorkbook sollte man sich nicht verlassen. Das kann gegebenfalls nur die Mappe liefern, wo die UserForm läuft. Ich meine sogar, das wäre ein Bug in Excel 2013 gewesen. Insofern wären dann alle ActiveWorkbook-Anweisungen durch bspw. Workbooks(„Dateiname“) zu ersetzen.

Viele Grüße,
Mourad

Hallo Mourad,
danke für die Antwort.
Genau das ist mein Problem. Wenn ich die Datei geöffnet habe ist die UserForm weg. Die ist dann noch in der vorgänger Datei aktiv. Also in der Datei die schon offen war.
Beispiel: Ich habe eine Datei mit offen die „Book1“ heißt.
Wenn ich jetzt über eine UserForm eine Datei öffne z.B. „specimenNeu.xlsx“ wird die Datei geöffnet aber die UserForm ist weg. Wenn ich auf „Book1“ klicke ist die UserForm da aktiv und sichtbar. Ich brauche die UserForm aber in der Datei „specimenNeu.xlsx“.
Ich hoffe das ich mein Problem jetzt besser beschrieben habe?
Vielen Dank und viele Grüße,
Gerd

Wenn ich über z.B. „AppActivate UserForm.Caption“ die UserForm wieder aktiviere zeigt Excel mir wieder „Book1“ an und nicht mehr „specimenNeu.xlsx“.

Hallo Gerd,

ich würde sagen, dei UserForm ist nicht weg, sondern in den Hintergrund gewandert. Du könntest probieren, direkt nach dem Öffnen der Datei den Fokus wieder auf ein bestehendes oder dummy Steuerelement in der UserForm zu setzen.

Beispiel: dummy Steuerelement ist ein Textfeld (was einen Fokus akzeptiert), dann direkt nach dem Öffnen der Datei Textfeld.SetFocus() aufrufen. Ein Dummy kannst Du aus der Tab-Reihenfolge rausnehmen und verstecken. Besser ist eher ein bestehendes Steuerelement zu verwenden, macht weniger Aufwand.

Klappt das nicht, bliebe noch Windows API, um die UserForm per se immer (!) den Vordergrund zu zwingen,

Viele Grüße,
Mourad

Hallo Mourad,
über „AppActivate“ kann ich die UserForm auch wieder in den Vordergrund bringen. Dann ist aber meine „specimenNeu.xlsx“ im Hintergrund. Wie funktioniert die API? Die UserForm soll immer im Vordergrung sein.

Hallo Mourad,
ich kann die UserForm ja aktivieren, aber dann ist die neu geöffnete Datei weg (im Hintergrund) Wie funktioniert die API Funktion?? Die UserForm soll ja IMMER im Vordergrund sein.
Vielen Dank für deine Hilfe,
Gerd

Hallo Mourad,
ich kann die UserForm ja aktivieren, dann ist aber die eben geöffnete Datei weg (bzw. im Hintergrund) Wie Funktioniert die API Funktion?? Die UserForm soll ja IMMER im Vordergrund sein. Das ist ja genau das was ich brauche.
Vielen dank für Deine Hilfe,
Gerd

Hallo Gerd,

anbei ein Code, der in das Modul der Userform gehört. Kannst natürlich auch die API-Deklarationen Funktionen auslagern und SetUserFormTopmost in ein Modul auslagern machen, damit Du dann das in allen UserForms verwenden kannst.

Private Declare PtrSafe Function apiFindWindow Lib "user32" _
Alias "FindWindowA" (ByVal lpClassName As Any, _
ByVal lpWindowName As String) As LongPtr

Private Declare PtrSafe Function apiSetWindowPos Lib "user32" _
Alias "SetWindowPos" (ByVal hwnd As LongPtr, _
ByVal hWndInsertAfter As LongPtr, ByVal x As Long, _
ByVal y As Long, ByVal cx As Long, ByVal cy As Long, _
ByVal wFlags As Long) As Long

Private Function SetUserFormTopmost() As Long

Dim h As LongPtr

On Error Resume Next
h = apiFindWindow(0&, Me.Caption)
If h <> 0 Then
apiSetWindowPos h, -1, 0, 0, 0, 0, 3
End If
End Function

Private Sub UserForm_Initialize()
SetUserFormTopmost
End Sub

Viele Grüße,
Mourad

PS: Kommentare muss ich hier immer freischalten, auch wenn jemand bereits kommentiert hat.

Hallo Mourad,
Vielen Dank.
Es funktioniert erst wenn ich eine zweite Datei öffne.
Bei der ersten Datei ist das gleiche Verhalten wie zuvor.
Viele Grüße,
Gerd

Hallo Gerd,

kann ich nicht nachvollziehen. Die Userform sollte grundsätzlich immer oben sein, was es bei mir auch macht. Auch im Vordergrund von anderen Anwendungen.

Viele Grüße,
Mourad

Hallo Mourad,
es funktioniert. War mein Fehler. Sorry.
Vielen herzlichen Dank für deine SUPER Hilfe.
Viele Grüße,
Gerd

Hallo Mourad,
leider doch zu früh gefreut. Sobald ich in eine andere UserForm springe wechselt Excel wieder zu Book1 zurück.
Ich könnte heulen.
Viele Grüße,
Gerd

Hallo Gerd,

sorry, das übersteigt jetzt jedoch eine einfache Unterstützung per Kommentar. Ich würde Dir an dieser Stelle empfehlen, Dich an ein Forum zu wenden. Ich kann Dir dieses hier wärmesten empfehlen: https://www.clever-excel-forum.de/index.php

Viele Grüße,
Mourad

Hallo Mourad,
ist OK. Dennoch vielen herzlichen Dank für deine Hilfe.
Viele Grüße,
Gerd