2015-10-01 90 views
0

我正在使用Outlook 2010,我試圖根據附件名稱將電子郵件轉發給特定用戶。下面的代碼工作,除了我必須在Outlook中爲每個不同的附件名稱創建一個規則(即使在交換控制檯中將規則大小增加到256kb後,我的規則最終也會用完存儲空間)。根據附件名稱轉發電子郵件

我想這個腳本運行在一個規則下。如果附件名稱是「xxxxx.pdf」,那麼它將需要類似....如果不是,則發送到「[email protected]」,然後跳過,如果附件名稱是「xx.xls」,則發送到「 [email protected]「如果不是那麼跳過....等等...

以下是我到目前爲止,我想這一切結合起來。

代碼在Outlook會議粘貼:

Sub SendOnMessage23(olItem As MailItem) 
Dim olAtt As Attachment, yest As Boolean, ol_newmail As MailItem 
For Each olAtt In olItem.Attachments 
    If InStr(1, olAtt.FileName, "Print_Ack_Rpt.rpt_1100023-1") > 0 Then yest = True: Exit For 
NextIf yest = True Then 
    Set ol_newmail = olItem.Forward 
     ol_newmail.To = "[email protected]" 
     ol_newmail.Send 
End If 
End Sub 

Sub SendOnMessage23(olItem As MailItem) 
Dim olAtt As Attachment, yest As Boolean, ol_newmail As MailItem 
For Each olAtt In olItem.Attachments 
    If InStr(1, olAtt.FileName, "Print_Ack_Rpt.rpt_1100024-1") > 0 Then yest = True: Exit For 
NextIf yest = True Then 
    Set ol_newmail = olItem.Forward 
     ol_newmail.To = "[email protected]" 
     ol_newmail.Send 
End If 
End Sub 

Sub SendOnMessage23(olItem As MailItem) 
Dim olAtt As Attachment, yest As Boolean, ol_newmail As MailItem 
For Each olAtt In olItem.Attachments 
    If InStr(1, olAtt.FileName, "Print_Ack_Rpt.rpt_1100024-1") > 0 Then yest = True: Exit For 
NextIf yest = True Then 
    Set ol_newmail = olItem.Forward 
     ol_newmail.To = "[email protected]" 
     ol_newmail.Send 
End If 
End Sub 

Sub SendOnMessage23(olItem As MailItem) 
Dim olAtt As Attachment, yest As Boolean, ol_newmail As MailItem 
For Each olAtt In olItem.Attachments 
    If InStr(1, olAtt.FileName, "Print_Ack_Rpt.rpt_1100024-1") > 0 Then yest = True: Exit For 
NextIf yest = True Then 
    Set ol_newmail = olItem.Forward 
     ol_newmail.To = "[email protected]" 
     ol_newmail.Send 
End If 
End Sub 

回答

0

我相信你正在尋找利用ElseIf條件。它也好像你沒有正確地使用If條件。

一個建議對於您目前的替補

If聲明,當參數滿足其下方和EndIf條件才能運行的代碼。因此,不要將yest變量設置爲True並退出循環,而只需在If語句下的參數爲true時插入想要運行的代碼。當條件爲真時,電子郵件將轉發,如果不是,則代碼將轉到下一個附件,以查看它是否滿足您的If聲明。

對於你的第一個子代碼將是這個樣子:

Sub SendOnMessage23(olItem As MailItem) 
Dim olAtt As Attachment, ol_newmail As MailItem 

For Each olAtt In olItem.Attachments 
    If InStr(1, olAtt.FileName, "Print_Ack_Rpt.rpt_1100023-1") > 0 Then 
     Set ol_newmail = olItem.Forward 
     ol_newmail.To = "[email protected]" 
     ol_newmail.Send 
     Exit Sub 
    End If 
Next 

End Sub 

我還包括一個Exit條款找到一個滿意的附件後,這樣,如果由於某種原因,你有它不發出多封電子郵件兩個符合條件的附件。

結合一切都變成一個子現在我們有If聲明合作,我們可以開始使用ElseIf您的潛艇組合成一個

。基本上ElseIf的工作原理是,當條件測試之前的條件是錯誤的,然後在測試條件時得到一個鏡頭。因此,在這種情況下,當您的If聲明不滿意時,下面的ElseIf將檢查是否滿足其條件。當它執行它的代碼時,當它不是代碼進行到下一行時。您可以根據需要添加儘可能多的ElseIf,他們將按順序檢查其條件。我們將充分利用這所有的潛艇組合成一個像這樣:

Sub SendOnMessage23(olItem As MailItem) 
Dim olAtt As Attachment, ol_newmail As MailItem 

For Each olAtt In olItem.Attachments 
    If InStr(1, olAtt.FileName, "Print_Ack_Rpt.rpt_1100023-1") > 0 Then 
     Set ol_newmail = olItem.Forward 
     ol_newmail.To = "[email protected]" 
     ol_newmail.Send 
     Exit Sub 
    ElseIf InStr(1, olAtt.FileName, "Print_Ack_Rpt.rpt_1100024-1") > 0 Then 
     Set ol_newmail = olItem.Forward 
     ol_newmail.To = "[email protected]" 
     ol_newmail.Send 
     Exit Sub 
    '... keep adding your other subs following the ElseIf format above 
    End If 
Next 

End Sub 

我沒有測試任何在Outlook上面的代碼,但如果你的代碼是工作本應正常工作。如果沒有,請告訴我們,我們可以解決任何問題。

+0

這工作完美。感謝您花時間清理並詳細解釋代碼! –