2017-06-28 4 views
0

Lorsque vous répondez, que vous transférez (ou que vous effectuez une sorte de réponse à un élément de courrier électronique), je souhaite modifier le corps du message. Je sais comment faire cela sur l'événement "envoyer", mais je préfère le faire avant de composer pour que je puisse voir le changement. Utilisation envoyer:Modification d'un message de réponse/transmission Outlook lors de la composition à l'aide de vba

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean) 
    On Error Resume Next 
    Set RegX = CreateObject("VBScript.RegExp") 
    With RegX 
     .pattern = "[a regular expression that I want to fix in the email body]" 
     .Global = True 
     .MultiLine = True 
     .IgnoreCase = False 
    End With 
    Select Case Item.BodyFormat 
     Case olFormatHTML 
      Item.HTMLBody = RegX.Replace(Item.HTMLBody, "") 
     Case Else 
      'olFormatPlain, olFormatRichText, lFormatUnspecified? 
      Item.Body = RegX.Replace(Item.Body, "") 
    End Select 
End Sub 

J'ai trouvé un moyen de déclencher l'événement de composition dans les fenêtres externes (Inspectors.NewInspector) mais ont du mal à trouver une manière transparente qui comprend une réponse composée dans l'éditeur en ligne dans Outlook 2016 (Explorer .InlineResponse);

est ici ce qui fonctionne pour le « sauté sur » réponse fenêtres modales:

Dim myOlApp As New Outlook.Application 
Public WithEvents myOlInspectors As Outlook.Inspectors 

Public Sub Initialize_handler() 
    Set myOlInspectors = myOlApp.Inspectors 
End Sub 

Private Sub myOlInspectors_NewInspector(ByVal Inspector As Outlook.Inspector) 
    Set Item = Inspector.CurrentItem 
    Set RegX = CreateObject("VBScript.RegExp") 
    With RegX 
     .pattern = "[a regular expression that I want to fix in the email body]" 
     .Global = True 
     .MultiLine = True 
     .IgnoreCase = False 
    End With 
    Select Case Item.BodyFormat 
     Case olFormatHTML 
      Item.HTMLBody = RegX.Replace(Item.HTMLBody, "") 
     Case Else 
      'olFormatPlain, olFormatRichText, lFormatUnspecified? 
      Item.Body = RegX.Replace(Item.Body, "") 
    End Select 
End Sub 

Comment pouvons-nous faire quelque chose de similaire qui fonctionne également dans l'éditeur en ligne, en utilisant de préférence une seule fonction transparente.

Répondre

1

Pour les réponses en ligne, vous pouvez essayer d'utiliser l'événement Explorer.InlineReponse - l'élément sera transmis en tant que paramètre.

Exemple de ceci dans l'action:

Dim myOlApp As New Outlook.Application 
Public WithEvents myOlExplorer As Outlook.Explorer 

Public Sub Initialize_handler() 
    Set myOlExplorer = myOlApp.ActiveExplorer 
End Sub 

Private Sub myOlExplorer_InlineResponse(ByVal Item As Object) 
    ' do things to the Item here in the inline response 
End Sub