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

Forumthread: VBA-generierte Mail hängt im Postausgang

VBA-generierte Mail hängt im Postausgang
11.10.2022 18:44:01
Martin
Ich verwende diesen Code auf einem unter Win 10 laufenden Notebook zum Erzeugen einer neuen Mail:

Sub EMailVersendenOutlook()
Dim obNachricht As Object
Dim obMail As Object
Set obMail = CreateObject("Outlook.Application")
Set obNachricht = obMail.CreateItem(0)
With obNachricht
.To = "empfaenger@domain.com"
.Subject = "Test"
.Body = "Test"
.Display
End With
Set obNachricht = Nothing
Set obMail = Nothing
End Sub
Wenn ich diesen Code ausführe, öffnet sich -unabhängig davon, ob Outlook schon geöffnet ist- sofort eine neue Outlook-Nachricht. Nach dem Klick auf Senden schließt sich das Fenster wieder.
Wenn Outlook bereits geöffnet war, wird die Mail auch tatsächlich sofort versandt.
War Outlook hingegen noch nicht geöffnet, geht die Mail nicht raus, sondern bleibt im Postausgang liegen. Erst wenn ich Outlook tatsächlich öffne, erfolgt der Versand.
Exakt den gleichen Code verwende ich auch innerhalb einer Citrix-Umgebung, wo die gleichen Versionen von Excel und Outlook laufen. Hier bewirkt das Ausführen des Codes bei geschlossenem Outlook zunächst, dass Outlook startet, ehe das Fenster mit der neu generierten Outlook-Nachricht erscheint.
Ich verstehe dieses unterschiedliche Verhalten nicht. Ich verstehe auch gar nicht, wie das Notebook die Outlook-Nachricht darstellen kann, solange Outlook noch gar nicht geöffnet ist.
Lässt sich der VBA-Code irgendwie dahingehend ändern, dass zuerst geprüft wird, ob Outlook schon geöffnet ist, und falls nicht, es zunächst öffnet?
Ich suche mir hier schon seit Wochen einen Wolf und bin für alle Tipps dankbar.
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA-generierte Mail hängt im Postausgang
11.10.2022 22:07:16
Oberschlumpf
du suchst seit Wochen? echt? glaub ich nich!
hab diesen Suchtext in google eingegeben:
vba outlook öffnen (Ungefähr 12.100.000 Ergebnisse (0,54 Sekunden))
Und gleich beim 1. Treffer kommt das, was du brauchst....seit Wochen gesucht...uihuihuih...gib nicht "Marmelade" als Suchtext ein, wenn du nach "KFZ-Ersatzteil" suchst...
hilfts?
Anzeige
AW: VBA-generierte Mail hängt im Postausgang
12.10.2022 11:43:01
Martin
@Oberschlumpf: Ich verwende meinen Code seit Jahren, und immer wurde bei geschlossenem Outlook dieses durch CreateObject("Outlook.Application") automatisch geöffnet. Nur auf den neuen Notebooks funktioniert das jetzt nicht. Ich habe immer "CreateObject("Outlook.Application") " als Suchbegriff verwandt und bin so nie auf die Idee gekommen, dass ein Shellbefehl notwendig sein könnte.
@onur: Mit .Send statt .Display erfolgt tatsächlich auch bei geschlossenem Outlook ein sofortiger Versand. Das hilft mir aber leider nicht, weil die Mail vor dem Absenden noch individuell ergänzt werden muss.
@volti: Dein Code macht im Prinzip nichts anderes als mein Code. Es wird erkannt, dass Outlook noch nicht geöffnet ist und CreateObject("Outlook.Application") wird ausgeführt. Das bewirkt aber auf dem Notebook nicht etwa, dass Outlook startet. Es kommt nur das Outlook-Nachrichtenfenster, und wenn man das sendet, landet die Mail im Postausgang und bleibt dort liegen, bis Outlook tatsächlich geöffnet wird.
Diese Variante scheint aber zu funktionieren:

Sub EMailVersendenOutlook2()
Dim obNachricht As Object
Dim obMail As Object
On Error Resume Next
Set obMail = GetObject(, "Outlook.Application")
If obMail Is Nothing Then
MsgBox "Outlook ist noch nicht geöffnet - wird jetzt geöffnet"
Shell "Outlook.exe", 1
End If
On Error GoTo 0
Set obMail = CreateObject("Outlook.Application")
Set obNachricht = obMail.CreateItem(0)
With obNachricht
.To = "empfaenger@domain.com"
.Subject = "Test"
.Body = "Test"
.Display
End With
Set obNachricht = Nothing
Set obMail = Nothing
End Sub
In der Citrix-Umgebung, wo bereits GetObject(, "Outlook.Application") zum Öffnen von Outlook ausreicht, wird dann zum Glück keine zweite Instanz gestartet.
Ich danke für alle Beiträge!
Anzeige
AW: VBA-generierte Mail hängt im Postausgang
11.10.2022 22:56:26
onur
Wenn du willst, dass die Mail sofort versendet wird, egal ob Outlook läuft oder nicht, nimm

.Send
statt

.Display

AW: VBA-generierte Mail hängt im Postausgang
12.10.2022 09:13:44
volti
Hallo Martin,
so kannst Du testen, ob Outlook schon geöffnet ist.....
Code:


Sub EMailVersendenOutlook() Dim obNachricht As Object Dim obMail As Object On Error Resume Next Set obMail = GetObject(, "Outlook.Application") If obMail Is Nothing Then Set obMail = CreateObject("Outlook.Application") End If On Error GoTo 0 Set obNachricht = obMail.CreateItem(0) With obNachricht .To = "empfaenger@domain.com" .Subject = "Test" .Body = "Test" .Display End With Set obNachricht = Nothing Set obMail = Nothing End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA-Fehlerbehebung: Mails hängen im Postausgang von Outlook


Schritt-für-Schritt-Anleitung

Um das Problem zu beheben, dass E-Mails im Postausgang hängen bleiben, kannst Du den folgenden VBA-Code verwenden. Dieser prüft, ob Outlook bereits geöffnet ist und öffnet es gegebenenfalls:

Sub EMailVersendenOutlook()
    Dim obNachricht As Object
    Dim obMail As Object
    On Error Resume Next
    Set obMail = GetObject(, "Outlook.Application")
    If obMail Is Nothing Then
        MsgBox "Outlook ist noch nicht geöffnet - wird jetzt geöffnet"
        Shell "Outlook.exe", 1
    End If
    On Error GoTo 0
    Set obMail = CreateObject("Outlook.Application")
    Set obNachricht = obMail.CreateItem(0)
    With obNachricht
        .To = "empfaenger@domain.com"
        .Subject = "Test"
        .Body = "Test"
        .Display
    End With
    Set obNachricht = Nothing
    Set obMail = Nothing
End Sub

Dieser Code sorgt dafür, dass Outlook gestartet wird, falls es nicht bereits geöffnet ist, und die E-Mail nicht im Postausgang hängen bleibt.


Häufige Fehler und Lösungen

  1. Mail bleibt im Postausgang hängen: Stelle sicher, dass Outlook geöffnet ist, bevor Du die E-Mail versendest. Nutze dazu die oben angegebene Methode.

  2. Outlook sendet nicht aus Postausgang: Überprüfe die Internetverbindung und die Outlook-Einstellungen, um sicherzustellen, dass der Versand korrekt konfiguriert ist.

  3. E-Mail hängt im Postausgang, wenn Outlook nicht geöffnet ist: Der Code öffnet Outlook und erstellt die E-Mail, bevor sie angezeigt wird. Dies sollte das Problem lösen.


Alternative Methoden

Die Verwendung der .Send-Methode anstelle von .Display kann helfen, die E-Mail sofort zu versenden:

Sub EMailVersendenOutlookSofort()
    Dim obNachricht As Object
    Dim obMail As Object
    On Error Resume Next
    Set obMail = GetObject(, "Outlook.Application")
    If obMail Is Nothing Then
        Shell "Outlook.exe", 1
    End If
    On Error GoTo 0
    Set obMail = CreateObject("Outlook.Application")
    Set obNachricht = obMail.CreateItem(0)
    With obNachricht
        .To = "empfaenger@domain.com"
        .Subject = "Test"
        .Body = "Test"
        .Send ' sofortiger Versand
    End With
    Set obNachricht = Nothing
    Set obMail = Nothing
End Sub

Diese Methode ist nützlich, wenn die E-Mail nicht mehr im Postausgang hängen bleiben soll.


Praktische Beispiele

  • E-Mail mit Anhang versenden: Wenn Du eine E-Mail mit Anhang versenden möchtest, kannst Du den Code wie folgt erweitern:
With obNachricht
    .To = "empfaenger@domain.com"
    .Subject = "Test mit Anhang"
    .Body = "Hier ist der Anhang."
    .Attachments.Add "C:\Pfad\zu\deinem\Anhang.txt"
    .Display
End With
  • Kalenderwoche in der E-Mail anzeigen: Du kannst auch die aktuelle Kalenderwoche in den E-Mail-Text einfügen:
Dim kw As Integer
kw = DatePart("ww", Now)
.Body = "Aktuelle Kalenderwoche: " & kw

Tipps für Profis

  • Verwende On Error Resume Next nur, wenn Du sicher bist, dass Fehler behandelt werden. Andernfalls kann es schwierig sein, den Fehlerursprung zu finden.
  • Teste Deinen Code in einer sicheren Umgebung, bevor Du ihn in einer produktiven Umgebung einsetzt, um unerwartete Probleme zu vermeiden.

FAQ: Häufige Fragen

1. Warum bleibt meine E-Mail im Postausgang hängen?
Das liegt oft daran, dass Outlook nicht geöffnet ist. Der VBA-Code sollte Outlook vor dem Erstellen der E-Mail öffnen.

2. Was kann ich tun, wenn Outlook mail nicht aus Postausgang sendet?
Überprüfe, ob die Internetverbindung funktioniert und ob die Outlook-Einstellungen korrekt sind. Der Code zum Überprüfen, ob Outlook geöffnet ist, sollte helfen.

3. Wie kann ich sicherstellen, dass die E-Mail sofort gesendet wird?
Nutze die .Send-Methode anstelle von .Display, um die E-Mail direkt zu versenden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige