2017-02-17 3 views
0

Ich möchte dieses Makro verwenden, das ich aus dem Interweb "gestohlen" habe. (Zumindest bin ich ehrlich ...)oItem_Reply funktioniert nicht mehr nach dem Abbrechen des Nachrichtenfensters

Es fügt der Betreffzeile ein Stichwort bei der Beantwortung einer E-Mail.

Es funktioniert wie beabsichtigt beim Senden einer E-Mail, aber wenn ich das Nachrichtenfenster abbricht, stoppt die Funktion die Auslösung, bis ich Outlook neu starte.

Warum verhält es sich so? Ich habe versucht, es ohne Glück zu debuggen ... Kann mir jemand helfen, dies zu sortieren?

Der Kodex in Dieseoutlooksitzung

Option Explicit 
    Private WithEvents oExpl As Explorer 
    Private WithEvents oItem As MailItem 
    Private bDiscardEvents As Boolean 
    '//slipstick.me/44b0w 

    Private Sub Application_Startup() 
     Set oExpl = Application.ActiveExplorer 
     bDiscardEvents = False 
    End Sub 

    Private Sub oExpl_SelectionChange() 
     On Error Resume Next 
     Set oItem = oExpl.Selection.Item(1) 
    End Sub 

    ' Reply 
    Private Sub oItem_Reply(ByVal Response As Object, Cancel As Boolean) 

     Cancel = True 
     bDiscardEvents = True 

     Dim oResponse As MailItem 
     Set oResponse = oItem.Reply 

    ' add the fields here 
     oResponse.Subject = "keyword " & oResponse.Subject 

     oResponse.Display 

     bDiscardEvents = False 
    Set oItem = Nothing 
    End Sub 

Antwort

0

Nicht sicher, warum Sie den Fehler bekommen; Es könnte ein paar Probleme geben - es könnte mit dem Abbrechen am Anfang des Subs zu tun haben oder mit 'Set oItem = Nothing'. Auch bDiscardEvents scheint nicht alles zu tun ...

Versuchen Sie Folgendes:

In Dieseoutlooksitzung

Private Sub olItem_Reply(ByVal Response As Object, Cancel As Boolean) 
    If AddKeywordToReply(olItem, "Test:") = True Then Cancel = True 
End Sub 

In einem Modul

Function AddKeywordToReply(oItem As MailItem, KeyWord As String) As Boolean 
    AddKeywordToReply = False 

    If oItem.Class = olMail Then 
     If Not oItem.sender Is Nothing Then 
      Dim oMsgReply As Outlook.MailItem 
      Set oMsgReply = oItem.Reply 
      oMsgReply.Subject = KeyWord & " " & oItem.Subject 
      oMsgReply.Display 
      Set oMsgReply = Nothing 
      AddKeywordToReply = True 
     End If 
    End If 
End Function 
+0

Oh - ich erinnere mich nur über Outlook nachgedacht; Wenn ein Fehler auftritt oder wenn der Code geändert wird, werden Macros/VBA nicht mehr ausgeführt und es ist ein Neustart des Programms erforderlich, um den VBA neu zu starten. Ich nehme an, es ist eine Schutzmaßnahme. – Tragamor

+0

Danke @Flephal! Das habe ich auch selbst herausgefunden. Die bDiscardEvents haben nichts getan, um sie zu entfernen, und "SetOItem = Nothing" hat die Mail im Explorer deaktiviert, sodass sie beim nächsten Mal nicht ausgelöst wurde. Wenn ich das Element erneut manuell ausgewählt habe, wurde das Skript ausgelöst, ohne Outlook neu starten zu müssen. – MrDark

Verwandte Themen