Google
 

星期日, 7月 05, 2009

如何用Outlook規則精靈自動執行巨集?

規則精靈我想大家都很清楚了,它可以設定針對符合特定條件的郵件執行你所需要的動作。
最簡單的,就是由寄件人和主旨判斷郵件該放到哪個資料夾裡。

如果能配合巨集,那就可以擁有更強大的自動功能。
例如在我的工作上,每天都會定時收到一些報表,這些報表是以附件的形式,透過email送到我的信箱。

如果每天我都要手動去把那些報表用"另存新檔"儲存在指定的資料夾,或許甚至要把這些報表轉換成特定格式,那會是很煩人又浪費時間的一件事。

所幸,如果結合Outlook的規則精靈和巨集功能,這些事都可以讓Outlook自動完成,一旦設定好了,它就可以每天自動幫你完成這些工作。

我們假設情況是這樣的:外包廠每天寄來的mail裡,會有一些郵件的寄件人和主旨為
寄件人: support@subcon.com.tw
主旨: Summary

這個郵件會包含一個或數個附件,附件就是我們所需要的生產結果報表。

這些mail會由外包廠每天不定時傳送,在收到這樣的郵件後,我會將它的報表,也就是我們所要的生產結果,放在下面這個資料夾中:
D:\Subcon\Summary

我希望在Outlook收到這樣的郵件後,由規則精靈自動判斷,然後自動將我所要的附件儲存在指定的資料夾中。

這個部份的功能要分為兩部份來講,一是規則精靈的部份,一個是VBA的部份。

首先,當然要先完成VBA巨集,這個巨集的工作,就是把郵件中的附件儲存在D:\Subcon\Summary資料夾中。程式碼如下:
Public Sub SaveAttachment(objMsg As Outlook.MailItem)
Dim objAttachments As Outlook.Attachments
Dim objSelection As Outlook.Selection
Dim i As Long
Dim lngCount As Long
Dim strFile As String, strExt As String
Dim strFolderpath As String
Dim strSaveFile As String

strFolderpath = "D:\Subcon\"
Set objAttachments = objMsg.Attachments
lngCount = objAttachments.Count
If lngCount > 0 Then
For i = 1 To lngCount
' 取得附件檔名
strFile = objAttachments.Item(i).filename
' 副檔名,可用來對附件來做進一步處理
' strExt = Right(strFile, 4)
' 指定儲存路徑
strSaveFile = strFolderpath & strFile
' 儲存附件
objAttachments.Item(i).SaveAsFile strSaveFile
Next i
End If

'在郵件主旨上加上"SAVED!"
objMsg.Subject = "SAVED!" + objMsg.Subject
objMsg.Save
End Sub


這個副程式有兩個地方要注意,一是它必需是Public的,另一個是它必需以Outlook.MailItem型別為參數,這個參數就是符合規則精靈條件的郵件。

接下來是設定規則精靈,讓它在郵件送達時執行這個巨集,將附件儲存起來。設定如下:


當郵件送達後,若寄件者地址中有support@subcon.com.tw,且主旨或內文中有Summary,就執行指令碼。
而指令碼就選擇上述的SaveAttachment。

4 則留言:

Kudo 提到...

因為我有和你相同的問題,
在SAVE 你的巨集到我的OUTLOOK2007 後,
也設定了,
但是, 沒有任何的動作發生.
是因為我使用2007 所以一些設定不一樣嗎?

ABON 提到...

objAttachments.Item(i).SaveAsFile (strSaveFile) 將子才能動

Unknown 提到...

This is great idea. Thus I can continue my excel VBA without manually support from outlook!

Eva 提到...

請問,VBA是否只能在固定的電腦來跑…我們是用帳號登入使用,所以,有可能在不同的電腦執行;如果有二台電腦同時登入,是否會造成問題,請問該如何解決
謝謝!