Delete automatic Signature from forwarded emails VBA macro

人走茶凉 提交于 2021-02-10 14:25:43

问题


Newbie Outlook VBA. intermediate Excel VBA. Windows 7 Professional, Outlook 2010

I have a script running from a rule that autoforwards all incoming emails. I need it as a rule because otherwise it will not forward the mails in the queue when Outlook loads.

I would like to have the default signature deleted when the mails are forwarded. As the reply is "blank" it is unnecessary to have the sig appended. I have found some code that supposedly worked in Outlook 2007 from the MSDN site. It compiles no errors, executes no errors. I have referenced MS Word in VBA. But the forwarded emails all have the signature still attached.

I cannot just delete the signature because I need it to be there on replies. The switch for the signature is for both replies and forwarded mail.

Here is the code:

Option Explicit
Sub Incoming3(MyMail As MailItem)
    Dim strID As String
    Dim strSender As String
    Dim StrSubject As String
    Dim objItem As Outlook.MailItem
    Dim myItem As Outlook.MailItem

    strID = MyMail.entryID
    Set objItem = Application.Session.GetItemFromID(strID)

    strSender = objItem.SenderName
    StrSubject = objItem.Subject
    StrSubject = strSender + ": " + StrSubject
    objItem.Subject = StrSubject
    objItem.AutoForwarded = False

    Set myItem = objItem.Forward

    myItem.Recipients.Add "bcc.hwb@gmail.com"
    myItem.DeleteAfterSubmit = True

    Call DeleteSig(objItem)

    myItem.Send

    Set myItem = Nothing
    Set objItem = Nothing

End Sub


Sub DeleteSig(msg As Outlook.MailItem)

    Dim objDoc As Word.Document
    Dim objBkm As Word.Bookmark

    On Error Resume Next

    Set objDoc = msg.GetInspector.WordEditor

    Set objBkm = objDoc.Bookmarks("_MailAutoSig")

    If Not objBkm Is Nothing Then
        objBkm.Select
        objDoc.Windows(1).Selection.Delete
    End If

    Set objDoc = Nothing
    Set objBkm = Nothing

End Sub

Any help with Outlook or VBA code would be much appreciated.


回答1:


When you assign a VBA macro sub to run by the rule you get an instance of the MailItem object. For example:

 Sub Incoming3(MyMail As MailItem)

The MyMail object represents an incoming email message which you should use in the code. But I see that you get a new instance:

strID = MyMail.entryID
Set objItem = Application.Session.GetItemFromID(strID)

There is no need to do so. Use the MyMail object in the code.

Also I see the following code:

 Set objBkm = objDoc.Bookmarks("_MailAutoSig")

Try to run the code under the debugger and see whether the bookmark can be found. If there is no such bookmark you need to search the body for the first entry From: in the text and delete all the content before that keyword.

Finally, you may find the Getting Started with VBA in Outlook 2010 article in MSDN helpful.




回答2:


Processing the wrong mail in DeleteSig.

myItem.DeleteAfterSubmit = True

Call DeleteSig(myItem)

myItem.Send

Edit 2015 02 26

Debugging VBA Code

Private Sub Incoming3_test()
' Open a mailitem then click F8 repeatedly from this code    
    Dim currItem As MailItem
    Set currItem = ActiveInspector.currentItem
    Incoming3 currItem        
End Sub

Sub Incoming3(MyMail As MailItem)        
    Dim myItem As Outlook.MailItem        
    Set myItem = MyMail.Forward            
    myItem.Subject = MyMail.senderName & ": " & MyMail.Subject
    myItem.Recipients.Add "bcc.hwb@gmail.com"
    myItem.DeleteAfterSubmit = True

    myItem.Display  ' If you are using F8 you can
                    '   view the action taken in DeleteSig.
                    '  Delete the line later.

    Call DeleteSig(myItem)
    'myItem.Send

    Set myItem = Nothing

End Sub

Sub DeleteSig(msg As Outlook.MailItem)

    Dim objDoc As Word.Document
    Dim objBkm As Word.Bookmark

    On Error Resume Next    '<--- Very bad without On Error GoTo 0
    Set objDoc = msg.GetInspector.WordEditor
    Set objBkm = objDoc.Bookmarks("_MailAutoSig")
    On Error GoTo 0

    If Not objBkm Is Nothing Then
        objBkm.Select                       ' <--- This is where the action starts.
        objDoc.Windows(1).Selection.Delete
    End If

    Set objDoc = Nothing
    Set objBkm = Nothing

End Sub

Edit 2015 02 26 - End



来源:https://stackoverflow.com/questions/28706852/delete-automatic-signature-from-forwarded-emails-vba-macro

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!