2015-02-24 113 views
1

新手展望VBA。中级Excel VBA。 Windows 7专业版,Outlook 2010从转发的电子邮件中删除自动签名VBA宏

我有一个脚本从规则运行,自动转发所有传入的电子邮件。我需要它作为规则,否则它不会在Outlook加载时转发队列中的邮件。

我希望邮件转发时删除默认签名。由于答复是“空白”,因此不需要附加sig。我发现一些代码可以在MSDN站点的Outlook 2007中工作。它编译没有错误,不会执行错误。我在VBA中引用了MS Word。但转发的电子邮件都附有签名。

我不能只是删除签名,因为我需要它在回复中。签名开关用于回复和转发邮件。

下面是代码:

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 "[email protected]" 
    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 

与Outlook或VBA代码任何帮助将非常感激。

回答

0

在DeleteSig中处理错误的邮件。

myItem.DeleteAfterSubmit = True 

Call DeleteSig(myItem) 

myItem.Send 

编辑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 "[email protected]" 
    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 

编辑2015年02 26 - 结束

+0

不,这没有什么区别。 Outlook仍附加签名。 – parodytx 2015-02-25 13:41:58

+0

不管这是不是最终修复程序,您是在DeleteSig中处理原始“objItem”,而不是作为转发邮件的“myItem”。 – niton 2015-02-25 21:31:52

+0

出于某种原因,您的推荐导致autoforward停止工作。当我恢复原状时,它会再次运作。我无法解释为什么发生这种情况。 – parodytx 2015-02-26 02:55:35

0

当您将VBA宏子由规则来运行你的实例MailItem对象。例如:

Sub Incoming3(MyMail As MailItem) 

的MyMail对象表示,你应该在代码使用传入的电子邮件消息。但我看到的是你得到一个新的实例:

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

没有这样做的必要。在代码中使用MyMail对象。

另外我看到下面的代码:

Set objBkm = objDoc.Bookmarks("_MailAutoSig") 

尝试在调试器下运行的代码,看到书签是否可以找到。如果没有这样的书签,您需要搜索正文中的第一个条目从:中删除文本中的所有内容并删除该关键字之前的所有内容。

最后,您可能会发现MSDN中的Getting Started with VBA in Outlook 2010文章很有帮助。

+0

注释掉以上内容。将所有对象更改为MyMail。 Macro autoforwards正确,但仍然附加sig,如前所述,被调用的子程序代码来自Microsoft,但是在Outlook 2007示例中。我在Word VBA中不够熟练,无法充分调试它。任何其他想法? – parodytx 2015-02-25 13:58:23

+0

当前网站是为开发人员。至少我建议学习基础知识。 – 2015-02-25 14:02:37