2015-02-24 34 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

相關問題