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

Forumthread: Feststellen, ob mailitem (Outlook) ber, versendet

Feststellen, ob mailitem (Outlook) ber, versendet
23.11.2004 07:38:10
Bjoern
Huhu zusammen,
mit dem nachstehenden Code:
-----------------------------------------

Sub versenden()
Do While i < 100
Dim objOutlook As Outlook.Application
Dim objOutlookMsg As Outlook.MailItem
Dim objOutlookRecip As Outlook.Recipient
Set objOutlook = CreateObject("Outlook.Application")
Set objOutlookMsg = objOutlook.CreateItem(olMailItem)
With objOutlookMsg
.To = "test@keinemail.de"
.Subject = "Test"
.HTMLBody = "<html><body>Test-Mail</body></html>"
.Display
Application.Wait Now + TimeSerial(0, 0, 1)
SendKeys "%S", True
'Sendkeys-Schleife:
dim z%
z = 1
Do While z < 10
.Display
SendKeys "%{s}", True
z = z + 1
DoEvents
Loop
End With
Set objOutlook = Nothing
Set objOutlookRecip = Nothing
Set objOutlookMsg = Nothing
i = i + 1
Loop
End Sub

-----------------------------
will ich die Sicherheitsfragen in OL umgehen (.Display und sendkeys "%s"). Das funktioniert auch weitgehend. Problem aber: Die sendkeys-Methode ist nicht sehr zuverlässig. Manchmal bliebt die Mail im nach ".Display" angezeigten Fenster "hängen". Um etwas mehr Zuverlässigkeit zu erzielen, möchte ich in einer folgenden Schleife einige Male die beiden Befehle ".Display" und sendkeys"%s" ausführen. Problem hierbei: Fehlermeldung, wenn die Mail(objOutlookMsg ) doch bereits verschickt wurde: "Das Objekt wurde verschoben oder gelöscht."
Um das zu verhindern, würde ich die Schleife gerne nur dann ausführen, wenn objOutlookMsg noch nicht versendet wurde. Wie läßt sich das abfragen? 'If Is Nothing objOutlookMsg Then' hilft hier ebenso wenig weiter (da Objekt noch existiert) wie 'If objOutlookMsg = "" Then'. Auch die Abfrage objOutlookMsg.sent funktioniert nur, solange die Mail noch nicht versendet wurde (Msgbox-AW: false). Hat jemand eine Idee / Lösung?
Vielen Dank für Eurere Tipps und Anregungen!
Viele Grüße
Björn
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Feststellen, ob mailitem (Outlook) ber, versendet
Papaloma
Hallo...
was ist mit der Mapi?

Private Sub CommandButton1_Click()
MAPISession1.SignOn
MAPIMessages1.SessionID = MAPISession1.SessionID
UserForm1.MAPIMessages1.Compose
UserForm1.MAPIMessages1.RecipDisplayName = "papaloma@testmail.de"
UserForm1.MAPIMessages1.MsgSubject = "Testmail"
UserForm1.MAPIMessages1.MsgNoteText = TextBox1.Text '(Variable)
UserForm1.MAPIMessages1.ResolveName
UserForm1.MAPIMessages1.Send
MAPISession1.SignOff
End Sub

geht auch oder?
Anzeige
AW: Feststellen, ob mailitem (Outlook) ber, versendet
23.11.2004 23:33:01
Bjoern
Huhu Papaloma,
es gibt eíniges...es gibt bspw auch CDO, welches auch meinem Rechner sogar ohne weiteres läuft - iGgs zu o.g. Vorschlag. Methode oder ... nicht gefunden heißt es da beim Versuch die Rotine auszuführen bei compose... Verweis auf eine Ojektbib habe ich im Katalog nicht gefunden. Abgesehen davon würde ich die Mails gerne über Ol schicken..allein schon aus Doku-Gründen.... Daher nochmals die Bitte zu prüfen, ob es für o.g. Fragestellung, eine Lösung gibt. Vielen Dank!
Viele Grüße
Björn
Anzeige
AW: Feststellen, ob mailitem (Outlook) ber, versendet
Sven
Mit On Error abfragen, ob ein Fehler aufgetreten ist.
mfg Sven
;
Anzeige
Anzeige

Infobox / Tutorial

Feststellen, ob ein MailItem in Outlook versendet wurde


Schritt-für-Schritt-Anleitung

Um festzustellen, ob ein MailItem in Outlook versendet wurde, kannst Du den folgenden VBA-Code verwenden. Dieser Code prüft, ob das MailItem bereits versendet wurde, bevor es erneut angezeigt wird:

Sub versenden()
    Dim objOutlook As Outlook.Application
    Dim objOutlookMsg As Outlook.MailItem
    Dim i As Integer
    Set objOutlook = CreateObject("Outlook.Application")
    Set objOutlookMsg = objOutlook.CreateItem(olMailItem)

    With objOutlookMsg
        .To = "test@keinemail.de"
        .Subject = "Test"
        .HTMLBody = "<html><body>Test-Mail</body></html>"
        .Display

        ' Überprüfen, ob die Nachricht bereits gesendet wurde
        If Not .Sent Then
            Application.Wait Now + TimeSerial(0, 0, 1)
            SendKeys "%S", True
        Else
            MsgBox "Die Mail wurde bereits versendet."
        End If
    End With

    Set objOutlookMsg = Nothing
    Set objOutlook = Nothing
End Sub

Dieser Code zeigt das MailItem an und verwendet SendKeys, um die Mail zu senden, sofern sie noch nicht versendet wurde.


Häufige Fehler und Lösungen

Ein häufiges Problem, das Benutzer beim Versenden von Mails über Outlook haben, ist die Fehlermeldung "Das Objekt wurde verschoben oder gelöscht". Hier sind einige Lösungen:

  • Fehler beim Senden: Stelle sicher, dass Du die .Sent-Eigenschaft des MailItems überprüfst, bevor Du die Send-Methode aufrufst.
  • SendKeys nicht zuverlässig: Wenn SendKeys in bestimmten Situationen nicht funktioniert, erwäge, stattdessen die .Send-Methode zu verwenden, um die Mail direkt zu versenden, ohne sie anzuzeigen.

Alternative Methoden

Zusätzlich zur Verwendung von Outlook VBA gibt es auch andere Möglichkeiten, Mails zu versenden:

  1. CDO (Collaboration Data Objects): CDO kann verwendet werden, um Mails zu versenden, ohne Outlook zu öffnen. Dies kann eine bessere Kontrolle und Zuverlässigkeit bieten.

  2. MAPI: Wie von Papaloma erwähnt, kannst Du MAPI verwenden, um Mails zu senden. Hier ist ein einfaches Beispiel:

    Private Sub CommandButton1_Click()
        MAPISession1.SignOn
        MAPIMessages1.SessionID = MAPISession1.SessionID
        UserForm1.MAPIMessages1.Compose
        UserForm1.MAPIMessages1.RecipDisplayName = "papaloma@testmail.de"
        UserForm1.MAPIMessages1.MsgSubject = "Testmail"
        UserForm1.MAPIMessages1.MsgNoteText = TextBox1.Text
        UserForm1.MAPIMessages1.ResolveName
        UserForm1.MAPIMessages1.Send
        MAPISession1.SignOff
    End Sub

Praktische Beispiele

Hier ist ein Beispiel, wie Du den Status eines MailItems abfragen kannst:

If objOutlookMsg.Sent Then
    MsgBox "Die Mail wurde erfolgreich versendet."
Else
    MsgBox "Die Mail ist noch nicht versendet."
End If

Dieses Beispiel zeigt, wie Du den Status des MailItems abfragen kannst, um zu entscheiden, ob Du es erneut versenden möchtest.


Tipps für Profis

  • Fehlerbehandlung: Verwende On Error-Anweisungen, um Fehler beim Versenden von Mails abzufangen. Dies kann Dir helfen, unerwartete Probleme zu vermeiden.

  • Optimierung: Wenn Du regelmäßig Mails versendest, erwäge, eine Funktion zu schreiben, die den gesamten Prozess automatisiert und die verschiedenen Methoden zur Fehlerbehandlung kombiniert.


FAQ: Häufige Fragen

1. Wie kann ich überprüfen, ob eine Mail bereits gesendet wurde?
Verwende die .Sent-Eigenschaft des MailItems, um den Status abzufragen, bevor Du versuchst, die Mail erneut zu senden.

2. Warum funktioniert SendKeys manchmal nicht?
Die SendKeys-Methode kann unzuverlässig sein, da sie von der Benutzeroberfläche abhängt. Verwende stattdessen die .Send-Methode, um die Mail direkt zu versenden.

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