2017-06-07 1 views
2

Warum habe ich das unten stehende Problem?Öffnen Sie die E-Mail nach dem Senden

Ich habe einen Code geschrieben, um gesendete E-Mails nach dem Senden von E-Mails zu öffnen. Der VBA-Code öffnet nicht die zuletzt gesendete E-Mail, sondern die vorherige.

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean) 
    Dim myItem As MailItem 
    Dim myNamespace As NameSpace 
    Dim myFolder As Folder 

    Set myNamespace = Application.GetNamespace("MAPI") 
    Set myFolder = myNamespace.GetDefaultFolder(olFolderSentMail) 
    Set myItem = myFolder.Items(myFolder.Items.Count) 

    myItem.Display 
End Sub 
+2

Willkommen zu Stack Overflow, lesen Sie bitte [fragen]. Das Hinzufügen Ihres Codes als verknüpfter Screenshot ist hier keine gute Übung und erschwert das Debuggen und schließlich das Helfen. – Picard

+0

Das 'Item' Argument hier ist ein Verweis auf die E-Mail, die gesendet wurde - Sie können vielleicht nur anzeigen, dass –

+0

@TimWilliams nicht können Sie nicht, siehe meine Antwort (die Notiz). Die E-Mail wird nicht vor dem Ereignis "Application_ItemSend", sondern nach dem Ereignis gesendet. –

Antwort

0

Dies ist die Antwort warum dies mit dem Application_ItemSend Ereignisse nicht:

Application_ItemSendvor gesendet wird, die E-Mail genannt wird. Sie können das sehen, weil es einen Cancel Parameter hat. Dies bedeutet, dass die E-Mail nur gesendet wird, wenn die E-Mail gelöscht wird.

Sie können die E-Mail einfach nicht anzeigen, da sie zu diesem Zeitpunkt nicht im Ereignis Application_ItemSend gesendet wird. Es wird gesendet, nachdem die Application_ItemSend beendet ist.

Hinweis: Wenn Sie einen Unterbrechungspunkt innerhalb der Application_ItemSend setzen, sehen Sie, dass das Fenster "Neue E-Mail" geöffnet/sichtbar bleibt, bis das Ereignis ItemSend beendet ist. Daher können Sie diese E-Mail nicht innerhalb dieser Veranstaltung öffnen.


Umgehung
Sie können den folgenden Code versuchen. Dadurch wird ein Ereignis für den Standardordner gesendeter Elemente erstellt, der beim Hinzufügen eines Elements zu diesem Ordner aufgerufen wird.

Nach dem Hinzufügen des Codes ist möglicherweise ein Neustart von Outlook erforderlich (oder führen Sie mindestens einmal die Prozedur Application_Startup aus).

Option Explicit 

Public WithEvents myOlItems As Outlook.Items 

Private Sub Application_Startup() 
    Set myOlItems = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderSentMail).Items 
End Sub 

Private Sub myOlItems_ItemAdd(ByVal Item As Object) 
    Item.Display 
End Sub 

Wenn der Ordner, in dem Gesendete Objekte bewegt werden, ist nicht die Standard-Outlook-Mail-Ordner gesendet, dann müssen Sie den richtigen Ordner finden, es in Application_Startup einzustellen.

+0

Ich habe Ihren Standpunkt. Bitte sagen Sie mir, wie kann ich dies ohne itemsend Ereignis erreichen ... – Ganesh

+0

@Ganesh Da es kein Ereignis für ** nach ** Senden einer E-Mail gibt es keine integrierte Möglichkeit, aber Sie können die Problemumgehung versuchen, die ich hinzugefügt habe. –

Verwandte Themen