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

Outlook-Fenster in Vordergrund bringen

Forumthread: Outlook-Fenster in Vordergrund bringen

Outlook-Fenster in Vordergrund bringen
01.10.2025 15:48:12
Soham235
Hallo Leute,
ich möchte mittels ff. Makro eMails versenden. Klappt so weit, so gut.
Sub eMail()

Dim OutApp As Object
Dim OutMail As Object
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = ""
.CC = ""
.Subject = ""
.Body = ""
.Display
End With
Set OutMail = Nothing
Set OutApp = Nothing
End Sub

Der einzige Haken an der Sache ist nur, dass dass ich das Outlook-Fenster in der Taskleiste anklicken muss, damit es in den Vordergrund kommt. Wie müsste ich den Code ändern, dass es dies automatisch macht?
Anzeige

26
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Outlook-Fenster in Vordergrund bringen
01.10.2025 16:36:50
Ulf
Hi,

Sub eMail()

Dim OutApp As Object
Dim OutMail As Object
Set OutApp = CreateObject("Outlook.Application")
OutApp.Visible=true
ActivateMicrosoftApp(xlMicrosoftMail)
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = ""
.CC = ""
.Subject = ""
.Body = ""
.Display
End With
Set OutMail = Nothing
Set OutApp = Nothing
End Sub

hth
Ulf
Anzeige
AW: Outlook-Fenster in Vordergrund bringen
01.10.2025 18:57:49
Alwin Weisangler
Hallo,

anbei ein Weg via Early Binding.
Activate wird über .GetInspector ausgelöst.

Einfach nur den Button drücken.
https://www.herber.de/bbs/user/179095.xlsm

Gruß Uwe
AW: Outlook-Fenster in Vordergrund bringen
01.10.2025 19:36:36
Raimund
Hi Soham 235,

So?



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

Declare PtrSafe Function SetForegroundWindow Lib "user32" ( _
ByVal hWnd As LongPtr) As Long

Sub eMail()
Dim OutApp As Object
Dim OutMail As Object
Dim hWnd As LongPtr

Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)

With OutMail
.To = "example@example.com"
.CC = ""
.Subject = "Betreff"
.Body = "Nachrichtentext"
.Display
End With

' Outlook-Fenster in den Vordergrund bringen
hWnd = FindWindow("rctrl_uilWindow", vbNullString)
If hWnd > 0 Then
SetForegroundWindow hWnd
End If

Set OutMail = Nothing
Set OutApp = Nothing
End Sub


Gruß

Raimund
Anzeige
AW: Outlook-Fenster in Vordergrund bringen
02.10.2025 05:36:27
Ulf
Hi,
Outlook scheint im neueren inaktiven Status zu starten, so ressourcenschonend usw.
Zusammengestoppelt, getestet und für brauchbar befunden:


Option Explicit

Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As Long) As Long

Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long

Sub eMail()
Dim MyOL As Outlook.Application
Dim OutMail As Outlook.MailItem ' Object
Dim OutlookWasNotRunning As Boolean
On Error Resume Next
If DetectOutlook Then
Set MyOL = Outlook.Application
Else
Set MyOL = GetObject(, "Outlook.Application")
If Err.Number = 429 Then
'Wenn myOL scheitert
'Dim pID As Long
'pID = Shell("Outlook.exe", vbNormalFocus)
'Set MyOL = GetObject(, "Outlook.Application")
Set MyOL = CreateObject("Outlook.Application")
DetectOutlook
End If
End If
If MyOL = "Outlook" Then
Set OutMail = MyOL.CreateItem(0)
OutMail.Application.ActiveInspector.Display
With OutMail
.To = ""
.CC = ""
.Subject = ""
.Body = ""
.Display
End With
End If
'MyOL.Application.Quit
Set MyOL = Nothing
End Sub

Function DetectOutlook()
Const WM_USER = 1024
Dim hWnd As Long
hWnd = FindWindow("rctrl_renwnd32", 0)
If hWnd = 0 Then
Else
SendMessage hWnd, WM_USER + 18, 0, 0
End If
DetectOutlook = Not (hWnd = 0)
End Function

hth
Ulf
Anzeige
AW: Outlook-Fenster in Vordergrund bringen
03.10.2025 13:53:04
volti
Hallo Ulf,

ich hätte da mal eine Frage:

SendMessage hWnd, WM_USER + 18, 0, 0

Welche Message wird da an Windows geschickt?
Was soll sie bewirken?

Der Wert &H412 (1024+18) steht nicht bzw. in einem anderen Zusammenhang in meiner Windowsliste und bewirkt bei mir auch nichts. Weder bei Outlook noch bei anderen Fenstern ist irgendeine Reaktion erkennbar.

Soll das ein Ersatz für SetForegroundWindow sein?

Gruß
Karl-Heinz
Anzeige
AW: Outlook-Fenster in Vordergrund bringen
03.10.2025 14:13:59
volti
Hat sich erledigt. Habe was dazu gefunden....

Gruß
KH
AW: Outlook-Fenster in Vordergrund bringen
03.10.2025 14:58:40
Volti
Danke für die Info...
AW: Outlook-Fenster in Vordergrund bringen
01.10.2025 20:20:54
Soham235
...wird leider auch nur minimiert in der Taskleiste geöffnet...

Kann es sein, dass es vielleicht an meiner Outlook-/PC-Konfiguration liegt? Folgende Varianten funktionieren nämlich mit meiner ursprünglichen Version:
1) Outlook öffnen und im Hintergrund laufen lassen. Bereits abgespeicherte Arbeitsmappe mit meiner Version öffnen und Makro ausführen.
2) Outlook schließen. Arbeitsmappe mit meiner Version öffnen. VBA-Editor öffnen und wieder schließen und Makro ausführen.
3) Outlook schließen. Neue Arbeitsmappe anlegen, meine Sub einfügen und sofort ausführen.
Sobald die Arbeitsmappe gespeichert ist und wieder geöffnet wird, wird das Fenster wieder in der Taskleiste angezeigt, es sei denn, dass entweder Outlook im Hintergrund läuft oder ich vor Ausführen des Makros einmal kurz den VBA-Editor öffne und wieder schließe ... seltsam ...

Bei Uwes und Raimunds Version verhält es sich übrigens gleich...
Anzeige
AW: Outlook-Fenster in Vordergrund bringen
01.10.2025 22:00:48
schauan
Hallöchen,

eventuell das Fenster eher in den Vordergrund holen und nicht erst vor dem Beenden von Outlook ;-)

oder was in der Art

Public Declare PtrSafe Function SetForegroundWindow Lib "user32" (ByVal hwnd As LongPtr) As Long


Sub eMail()
Dim OutApp As Object
Dim OutMail As Object
Dim lReturn
On Error Resume Next
Set OutApp = GetObject(, "Outlook.Application")
If Err.Number > 0 Then Set OutApp = CreateObject("Outlook.Application")
lReturn = SetForegroundWindow(OutApp.Application.hwnd)
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = ""
.CC = ""
.Subject = ""
.Body = ""
.Display
End With
Set OutMail = Nothing
Set OutApp = Nothing
End Sub


wobei wegen dem get... das bereits laufende Outlook verwendet und dann geschlossen wird. Ist vielleicht auch nicht gewünscht, dann das get... usw. weglassen
Anzeige
AW: Outlook-Fenster in Vordergrund bringen
01.10.2025 22:43:22
Soham235
Sorry, funktioniert leider auch nur in einer der drei in meinem letzten Posting erwähnten Vatianten.
Funktioniert der Code bei dir?

Generelle Frage in die Runde:
Funktioniert mein ursprünglicher Code bei euch, wenn ihr...
1) die Arbeitsmappe mit dem Code abspeichert
2) Excel und Outlook komplett beendet
3) die Arbeitsmappe erneut öffnet
4) dabei den VBA-Editor ungeöffnet lasst?
Wenn ja, dann muss es an meinen Outlook- und/oder PC-Einstellungen liegen.
Anzeige
AW: Outlook-Fenster in Vordergrund bringen
02.10.2025 12:04:34
schauan
also,

- erstmal siehst Du nicht Outlook an sich, sondern nur die neue Nachricht.
--> in der Taskleiste hast Du nur die Nachricht und nicht Outlook. Falls doch, nächster Anstrich...

- An Outlook kommst Du auf Benutzerebene nur, wenn Du es vorher offen hast.
--> Deine Nachricht wäre in einer zweiten "Session" von Outlook, die auch nicht in der Taskleiste angezeigt wird.

- den code würde ich per Button starten und dazu nicht den VBE-Editor nutzen


Ich habe mal nachgeschaut, im Gegensatz zu den anderen Office-Anwendungen fehlt beim Outlook die Visible-Eigenschaft :-(
Der Code von Ulf bringt mir auch nur das Nachrichtenfenster und nicht Outlook :-(

Damit Outlook überhaupt in der Taskleiste auftaucht, könnte man auch so vorgehen:

     On Error Resume Next

Set OutApp = GetObject(, "Outlook.Application")
If Err.Number > 0 Then
Shell ("OUTLOOK")
Set OutApp = CreateObject("Outlook.Application")
End If
On Error GoTo 0


Um das in den Vordergrund zu bringen, müsste man dann eventuell diese Richtung einschlagen:

https://www.devhut.net/vba-bring-a-window-to-the-front-without-knowing-its-hwnd/

Oder man kennt den Titel, dann wird es etwas einfacher...

Anzeige
AW: Outlook-Fenster in Vordergrund bringen
02.10.2025 13:43:42
JoWE
Hallo,
hier noch eine Version für MS Excel 64Bit:
Option Explicit


Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As Long) As Long
Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long

'Verweis Microsoft Outlook 16.0 Object Library erforderlich
Sub erstellen_eMail()
Dim MyOL As Outlook.Application
Dim OutMail As Outlook.MailItem ' Object
Dim OutlookWasNotRunning As Boolean
On Error Resume Next
If DetectOutlook Then
Set MyOL = Outlook.Application
Else
Set MyOL = GetObject(, "Outlook.Application")
If Err.Number = 429 Then
Set MyOL = CreateObject("Outlook.Application")
DetectOutlook
End If
End If
If MyOL = "Outlook" Then
Set OutMail = MyOL.CreateItem(0)
OutMail.Application.ActiveInspector.Display
With OutMail
.To = "Someone.Office@gmail.com"
.CC = ""
.Subject = "Testmail"
.Body = "Bitte testen Sie ausgiebig und teilen Sie ihre Ergebnisse mit. Danke!"
.Display
End With
End If
MyOL.ActiveExplorer
Set MyOL = Nothing
End Sub

Function DetectOutlook()
Const WM_USER = 1024
Dim hWnd As Long
hWnd = FindWindow("rctrl_renwnd32", 0)
If hWnd = 0 Then
Else
SendMessage hWnd, WM_USER + 18, 0, 0
End If
DetectOutlook = Not (hWnd = 0)
End Function

Gruß
Jochen
Anzeige
AW: Outlook-Fenster in Vordergrund bringen
02.10.2025 14:40:02
Volti
Hallo Jochen,
Für 64 Bit bitte dann auch die Handle und Pointer in den Function-Declares und im code als LongPtr deklarieren.
Einfach PtrSafe einsetzen reicht da nicht.
Gruß KH
AW: Outlook-Fenster in Vordergrund bringen
02.10.2025 16:53:08
schauan
... das holt aber nach wie vor nur eine neue Nachricht und nicht Outlook ...
Es wäre allerdings ganz gut, wenn der TE nochmal genau schreibt, ob er Outlook will oder (nur) die neue Nachricht oder was auch immer... Für die Nachricht funktionieren ja schon einige Codes.


wobei mich das schon etwas verwirrt:

erst
Der einzige Haken an der Sache ist nur, dass dass ich das Outlook-Fenster in der Taskleiste anklicken muss, damit es in den Vordergrund kommt.
dann irgendwann
...öffnet das E-Mail-Fenster leider auch nur in der Taskleiste, im Vordergrund wird jedoch Outlook selbst (was es nicht sollte) geöffnet...

Anzeige
AW: Outlook-Fenster in Vordergrund bringen
02.10.2025 18:18:49
Soham235
Hi Leute,
komme erst jetzt dazu, wieder ins Forum zu schauen.
Zuerst einmal vielen Dank für euren Einsatz und eure kreativen Lösungsvorschläge! Ihr seid top!

für die Nachricht funktionieren ja schon einige Codes ... eben leider nicht ganz. Viele Codes öffnen zwar, so wie eben mein ursprünglicher Code, das Outlook-Nachrichtenfenster. Ein Code in diesem Forum öffnet zudem das Outlook-Hauptprogramm, was er aber nicht sollte. Aber...

...nochmals zur Themenstellung:
Mein ursprünglicher Code öffnet, wie gewünscht (nur) das Nachrichtenfenster von Outlook. Dieses Nachrichtenfenster wird jedoch nicht im Vordergrund sondern in der Taskleiste angezeigt. Frage: Gibt es eine Möglichkeit, dieses Nachrichtenfenster mittels VBA in den Vordergrund zu rücken?

Alle hier "funktionierenden" Codes, sowie auch mein ursprünglicher, weisen folgende Besonderheiten auf.
Das Nachrichtenfenster erscheint nur im Vordergund, wenn:
1) vor Ausführung des Moduls der VBA-Editor geöffnet wurde oder
2) Outlook im Hinter-/Vordergrund bereits läuft.
Das Nachrichtenfenster erscheint in der Taskleiste, wenn:
1) die gespeichterte Arbeitsmappe geöffnet und das Modul ausgeführt wird und dabei
2) weder Outlook noch der VBA-Editor geöffnet ist.

Frage in die Runde: Wie verhält es sich auf euren PCs? Denn sollten alle hier genannten Codes unter den oben genannten Punkten auf euren PCs funzen, muss es wohl an meinen eigenen Outlook- oder PC-Einstellungen liegen.

Ich hoffe, ich habe mich nicht zu umständlich ausgedrückt. Vielen Dank nochmals für euren Einsatz!
Anzeige
AW: Outlook-Fenster in Vordergrund bringen
03.10.2025 13:31:57
JoWE
Hallo,
Deine Bedingungen:
Das Nachrichtenfenster erscheint nur im Vordergund, wenn:
1) vor Ausführung des Moduls der VBA-Editor geöffnet wurde oder
2) Outlook im Hinter-/Vordergrund bereits läuft.
Das Nachrichtenfenster erscheint in der Taskleiste, wenn:
1) die gespeichterte Arbeitsmappe geöffnet und das Modul ausgeführt wird und dabei
2) weder Outlook noch der VBA-Editor geöffnet ist.


An meinem Rechner (Windows 11, MS Excel 2024 64Bit):
das Nachrichtenfenster erscheint via Menü "Ansicht", "Makros Anzeigen", ausführen "erstellen_eMail" sofort ohne dass die VBA-Umgebung geöffnet ist
und auch wenn Outlook NICHT bereits im Hintergrund läuft. Und es erscheint auch dann sofort im Vordergrund wenn Outlook im Hintergrund bereits aktiviert ist.
Hier mein Makro:
Option Explicit

Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, lParam As Any) As LongPtr

Sub erstellen_eMail()
Dim MyOL As Outlook.Application
Dim OutMail As Outlook.MailItem ' Object
Dim OutlookWasNotRunning As Boolean
On Error Resume Next
If DetectOutlook Then
Set MyOL = Outlook.Application
Else
Set MyOL = GetObject(, "Outlook.Application")
If Err.Number = 429 Then
Set MyOL = CreateObject("Outlook.Application")
DetectOutlook
End If
End If
If MyOL = "Outlook" Then
Set OutMail = MyOL.CreateItem(0)
OutMail.Application.ActiveInspector.Display
With OutMail
.To = "someone.office@gmail.com"
.CC = ""
.Subject = "Testmail"
.Body = "Bitte testen Sie ausgiebig und teilen Sie ihre Ergebnisse mit. Danke!"
.Display
End With
End If
MyOL.ActiveExplorer
Set MyOL = Nothing
End Sub

Function DetectOutlook()
Const WM_USER = 1024
Dim hwnd As LongPtr
hwnd = FindWindow("rctrl_renwnd32", 0)
If hwnd = 0 Then
Else
SendMessage hwnd, WM_USER + 18, 0, 0
End If
DetectOutlook = Not (hwnd = 0)
End Function


Gruß
Jochen
Anzeige
AW: Outlook-Fenster in Vordergrund bringen
03.10.2025 21:50:08
Ulf
Hi,
nach etwas rumspielen:

Win10/OL2019 32: Keine gesicherten Ergebnisse, das Fensterhandling im Zusammenspiel mit der Taskleiste ist inkonsistent. Mal öffnet es wie soll, bei Verkleinern und schließen nicht mehr, dann wieder.. Neustart, Taskleistengruppierung, Outlook starten oder nicht bringt keine Verbesserungen. Meist liegt das Fenster gruppiert und muss aktiviert werden. Hier könnt man aus den Powertoys AlwaysOnTop probieren

Win11/OL2019 32: Funktioniert immer.

Man könnte jetzt die Kindfenster von Outlook durchsuchen und das Fenster mit Titel 'Unbekannt' in den Vordergrund bringen, aber auch da sehe ich kein Land.
hth
Ulf
Anzeige
AW: Outlook-Fenster in Vordergrund bringen
02.10.2025 15:07:28
JoWE
Hallo KH,
danke für den Hinweis, der mich gleichwohl etwas ratlos zurückläßt. Denn diesen Teil hatte ich von 'ich weiß nicht mehr vom wem' übernommen. Zeig' mir doch gerne den korrigierten Code oder wenn Du Zeit hast, bau die Korrektur doch bitte gern in den von mir geposteten Code ein.
Danke
Jochen
Anzeige
AW: Outlook-Fenster in Vordergrund bringen
02.10.2025 15:57:08
JoWE
aaahhh neee erledigt!!
Hab's schon kapiert, sorry, Danke nochmal,
LG
Jochen
AW: Outlook-Fenster in Vordergrund bringen
01.10.2025 19:16:10
Soham235
... funktioniert leider auch nicht. Das Fenster erscheint erneut nur minimiert in der Taskleiste.
Neue Erkenntnis in der Zwischenzeit: Beide Varianten, sowohl deine als auch meine ursprüngliche, funktionieren nur, wenn ich bereits Outlook geöffnet habe, egal ob minimiert im Hintergrund oder auch nicht...
Anzeige
AW: Outlook-Fenster in Vordergrund bringen
01.10.2025 17:30:14
Soham235
Hi Ulf,
danke für die schnelle Antwort, bekomme aber die Fehlermeldung:
ActivateMicrosoftApp ... "Fehler beim Kompilieren: Sub oder Function nicht definiert"
AW: Outlook-Fenster in Vordergrund bringen
01.10.2025 17:55:15
schauan
... statt fehlerhafter Zeile dann OutApp.Activate ...
AW: Outlook-Fenster in Vordergrund bringen
01.10.2025 20:27:17
Uduuh
Hallo,
Application.ActivateMicrosoftApp(xlMicrosoftMail)

Gruß aus'm Pott
Udo
Anzeige
AW: Outlook-Fenster in Vordergrund bringen
01.10.2025 20:46:15
Soham235
Hi, danke für deinen Vorschlag...

...öffnet das E-Mail-Fenster leider auch nur in der Taskleiste, im Vordergrund wird jedoch Outlook selbst (was es nicht sollte) geöffnet...
AW: Outlook-Fenster in Vordergrund bringen
01.10.2025 18:44:17
Soham235
... ergibt leider einen Laufzeitfehler 438: Objekt unterstützt diese Eigenschaft oder Methode nicht.
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18