Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Fenster wechseln mit VBA

Fenster wechseln mit VBA
13.03.2015 20:10:03
Tobias
Hallo,
im Verlauf eines Makros öffne ich ein Windows Explorer Fenster mit:

Shell "Explorer.exe C:\test", vbNormalFocus
Später öffnet sich eine MessageBox. Die macht sich allerdings nur durch wildes Blinken in der Taskleiste bemerkbar und erscheint nicht im Vordergrund.
Mein Ansatz vor der MsgBox mit

Windows(MeineDatei).Activate
zur Arbeitsmappe zurückzukehren funktioniert nicht.
Wie kann ich wieder zurück zu meiner Arbeitsmappe wechseln?
Danke für eine Antwort!

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Fenster wechseln mit VBA
13.03.2015 20:21:33
Luschi
Hallo Tobias,
bei mir klappt das so:
MsgBox "Ich habe fertig!", 48 + 4096, "Oohaaa..."
Gruß von Luschi
aus klein-Paris
PS: Schau mal in die Vba-Hilfe zu MsgBox!

AW: Fenster wechseln mit VBA
14.03.2015 01:44:09
Tobias
Hallo Luschi
du hast meine Frage wohl nicht verstanden. Ich weiß schon wie MsgBox funktioniert. Mein Problem ist, dass diese nicht im Vordergrund angezeigt wird.
Mit der Shell-Funktion öffne ich ein Windows Explorer-Fenster, das von da an im Vordergrund steht. Die Excel-Arbeitsmappe ist dann im Hintergrund, während weitere Rechenschritte durchgeführt werden.
Kommt es dann zum Ausführen der MsgBox-Funktion, so wird die MessageBox vom Windows Explorer-Fenster verdeckt, weil das immer noch im Vordergrund steht. Ich suche also nach einer Möglichkeit meine Arbeitsmappe wieder in den Vordergrund zu bringen.

Anzeige
AW: Fenster wechseln mit VBA
14.03.2015 11:00:49
Luschi
Hallo Tobias,
das habe ich nicht bezweifelt, aber warum testest Du diesen Einzeiler nicht mal?
Und in der Vba-Hilfe zu 4096 steht:
vbSystemModal - 4096
An das System gebunden. Alle Anwendungen werden unterbrochen, bis der Benutzer auf das Meldungsfeld reagiert.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Fenster wechseln mit VBA
14.03.2015 18:28:24
Tobias
Hallo Luschi
ok ich war die Nacht wohl etwas vorschnell und hab nicht erkannt worauf du hinaus willst. Allerdings bringt mir auch vbSystemModal nichts.
Wenn die MsgBox mit deiner Zeile auf geht macht sie sich auch zunächst nur durch Blinken in der Taskleiste bemerkbar. Das Explorer-Fenster ist noch immer im Vordergrund. Der einzige Unterschied liegt darin, dass die MsgBox ab dem Zeitpunkt, an dem ich auf das blinkende Taskleistenelement klicke, immer im Vordergrund bleibt, bis ich bestätigt habe. Bei vbMsgBoxSetForeground passiert das gleiche.
Ich hab hier mal eine Beispieldatei, dann kannst du es nachvollziehen.
Der einzige folgende Code wird mit Strg+a ausgelöst. Lässt man die Wartezeit weg ist Excel übrigens schneller als Windows. Dann ist die MsgBox schon da bevor der Explorer auf ist

Sub Makro1()
Shell "Explorer.exe C:\test", vbNormalFocus
Application.Wait (Now + TimeValue("0:00:05"))
MsgBox "Ich habe fertig!", vbSystemModal, "Oohaaa..."
End Sub

Die Datei https://www.herber.de/bbs/user/96366.xlsm wurde aus Datenschutzgründen gelöscht


Anzeige
AW: Fenster wechseln mit VBA
14.03.2015 20:25:07
Luschi
Hallo Tobias,
dann greifen wir mal etwas tiefer in die Windows-Trickkiste:
https://www.herber.de/bbs/user/96367.xlsm
Gruß von Luschi
aus klein-Paris

AW: Fenster wechseln mit VBA
15.03.2015 14:19:47
Tobias
Hallo Luschi,
Super, Vielen Dank! So klappt es auch bei mir :-)
Gruß Tobias
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Fenster wechseln mit VBA: So gelingt es dir


Schritt-für-Schritt-Anleitung

Um das Fenster in Excel mit VBA zu wechseln und sicherzustellen, dass deine Arbeitsmappe im Vordergrund bleibt, kannst du folgende Schritte befolgen:

  1. Öffne das Windows Explorer Fenster: Verwende den folgenden VBA-Code, um ein Windows Explorer Fenster zu öffnen:

    Shell "Explorer.exe C:\test", vbNormalFocus
  2. Wartezeit einfügen: Füge eine Wartezeit ein, um sicherzustellen, dass das Explorer-Fenster vollständig geöffnet ist, bevor du die nächste Aktion ausführst:

    Application.Wait (Now + TimeValue("0:00:05"))
  3. MsgBox anzeigen: Zeige nun die MessageBox an. Um sicherzustellen, dass sie im Vordergrund bleibt, setze den Modus auf vbSystemModal:

    MsgBox "Ich habe fertig!", vbSystemModal, "Oohaaa..."
  4. Vollständiger Code:

    Sub Makro1()
        Shell "Explorer.exe C:\test", vbNormalFocus
        Application.Wait (Now + TimeValue("0:00:05"))
        MsgBox "Ich habe fertig!", vbSystemModal, "Oohaaa..."
    End Sub

Häufige Fehler und Lösungen

  • Fenster bleibt hinter der Taskleiste: Wenn das Explorer-Fenster die MsgBox verdeckt, stelle sicher, dass du vbSystemModal verwendest, damit die MsgBox im Vordergrund bleibt.

  • Taskleiste verdeckt Fenster: Wenn die Taskleiste das Fenster verdeckt, kannst du die Windows-Einstellungen anpassen, um die Taskleiste automatisch auszublenden, während du mit Excel arbeitest.


Alternative Methoden

Wenn das Wechseln zwischen Fenstern weiterhin problematisch ist, kannst du folgende alternative Methoden ausprobieren:

  • API-Funktion verwenden: Du kannst die SetForegroundWindow API-Funktion verwenden, um das Fenster von Excel in den Vordergrund zu bringen. Hier ein Beispiel:

    Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
    
    Sub BringExcelToFront()
        SetForegroundWindow Application.hwnd
    End Sub
  • Taskleiste minimieren: Eine andere Möglichkeit ist, die Taskleiste zu minimieren, bevor du die MsgBox anzeigst.


Praktische Beispiele

Hier sind einige praktische Beispiele, die dir helfen, das Wechseln zwischen Fenstern zu optimieren:

  • Beispiel 1: Wenn du in einem Makro mehrere Fenster verwaltest, kannst du die Fenster in einer Schleife aktivieren:

    Dim w As Window
    For Each w In Application.Windows
        If w.Visible Then w.Activate
    Next w
  • Beispiel 2: Verwende DoEvents, um sicherzustellen, dass Excel Zeit hat, um auf Benutzeraktionen zu reagieren:

    Shell "Explorer.exe C:\test", vbNormalFocus
    DoEvents

Tipps für Profis

  • Verwende vbSystemModal strategisch: Dies kann dir helfen, sicherzustellen, dass wichtige Meldungen nicht übersehen werden.

  • Fensterüberwachung: Implementiere eine Überwachungsroutine, die prüft, welches Fenster aktiv ist, und wechsele nur dann, wenn es notwendig ist.

  • Makros optimieren: Achte darauf, dass deine Makros effizient sind. Reduziere die Wartezeiten, um die Benutzererfahrung zu verbessern.


FAQ: Häufige Fragen

1. Warum bleibt die MsgBox hinter dem Explorer-Fenster?
Die MsgBox bleibt oft hinter dem Explorer-Fenster, weil das Explorer-Fenster im Vordergrund bleibt. Verwende vbSystemModal, um das zu verhindern.

2. Wie kann ich zwischen verschiedenen Fenstern in Windows wechseln?
Du kannst die Alt + Tab-Tastenkombination verwenden, um zwischen Fenstern zu wechseln, oder die API-Funktion SetForegroundWindow in deinem VBA-Code nutzen.

3. Gibt es eine Möglichkeit, die Taskleiste während der Ausführung eines Makros auszublenden?
Ja, du kannst die Taskleiste minimieren, indem du die Windows-Einstellungen anpasst oder entsprechende VBA-Codes verwendest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige