最近有個需求,ERP系統會自動發很多csv附件到我郵箱,我需要把這些附件上傳到FTP服務器,服務器會把這些csv的數據寫到另外一個系統的數據庫。 每次大概有30個郵件,每個郵件有一個附件,而且附件的名字都一樣,是一個csv的文件,我每次需要手動的把附件另存為一個新名字存到本地,然后FTP上傳。 每次大概要浪費我10分鍾時間,而且毫無價值。 於是我就寫了一個VBA的自動處理程序,幾秒搞定。
如果你也有類似的需求,或者把附件再進行寫入數據庫,或者附件是Excel,需要整合到數據庫,可以再在服務器開發一個自動處理機器人,設置每5分鍾檢測一下是否有新文件,如果有就寫入數據庫或添加到一個總Excel表格。這些VBA 或 C#都可以完美處理。
話說把大象裝進冰箱分三個步驟: 第一步: 打開Outlook – Option – Trust Center – Truster Center Settings – Macro Settings – 勾選Enable all macros。 打開Outlook – Option – Trust Center – Truster Center Settings – Email Security – 勾選Allow script in shared folders 和 All script in public folders 重點:重啟Outlook,我因為沒重啟outlook,浪費了很多時間。 第二步: 編寫宏程序,按下Alt+F11,創建新項目,把程序copy進去,文件夾地址改一下
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long) Public Sub SaveAttach(MyItem As Outlook.MailItem) SaveAttachment MyItem, "C:\Data\MailAttached\" 'MsgBox "附件已保存" End Sub Private Sub SaveAttachment(ByVal Item As Outlook.MailItem, path, Optional condition = "*") Dim olAtt As Outlook.Attachment Dim i As Integer Dim dateFormat dateFormat = Format(Now, "yyyy-mm-dd hh-mm-ss") If Item.Attachments.Count > 0 Then For i = 1 To Item.Attachments.Count Set olAtt = Item.Attachments(i) If olAtt.FileName Like condition Then olAtt.SaveAsFile path & dateFormat & "_" & olAtt.FileName End If Next End If Set olAtt = Nothing Sleep 1000 End Sub
如下圖:保存解釋一下,因為我每個附件名字都相同,用時間重命名,只能到秒這個級別,所以我每次處理都Sleep 1秒,否則有可能會覆蓋掉上一個文件。
第三步:制作運行規則,這一步比較簡單,只放一張圖片,仔細看每個設定
