2021年9月12日 星期日

如何使用vba下載郵件並上傳至伺服器

程式很簡單,監控outlook的郵件主旨,然後將符合主旨的附檔存下來(這部份很簡單就成功了,網路上很多可以參考的範例)。

一開始當然是要讓outlook可以使用開發者功能,才能寫VBA程式。


接著我們開始建立專案,把程式寫好。


最後就是建立規則,這邊的關鍵是要『執行程式碼』,不是『執行程式』。












接著把附檔丟到我的linux server上,然後linux server會去檢查檔案是否存在,在的話把它匯入資料庫。
要在outlook開發程式只能用vba,但vba要呼叫tftp一直時好時壞。難怪前輩們都是用scp或sftp....

這邊簡單補充一下,一般是用excel先做測試,先開啟開發者功能,然後允許巨集,接著插入一個模組,把程式丟到模組,就可以測試了。測試完成後,再回到outlook,用alt+F11就可以開啟VBA編輯介面(建議outlook也要開啟開發者功能並允許使用巨集),接著產生新的outlook規則,然後呼叫程式碼(我之前一直選成呼叫應用程式)

但在公司不管用tftp或scp都失敗。(有幾次成功,但...不穩定的東西誰敢用)
在家裡用tftp跟scp倒是都成功。
看來是tftp client的問題嗎或者環境問題嗎?在公司換了一個tftp client,結果輕易成功了。Windows 10預設的tftp.exe 可能在AD環境執行有一些權限限制吧?

附上簡單範例範例:
Sub uploadfile()
ChDir "D:\TEMP" ' Make "D:\TEMP" the current folder.
ChDrive "D" ' Make "D" the current drive.
Dim wsh As Object Set wsh = VBA.CreateObject("WScript.Shell") Dim waitOnReturn As Boolean: waitOnReturn = True Dim windowStyle As Integer: windowStyle = 1 wsh.Run "d:\temp\upload.bat", windowStyle, waitOnReturn
end Sub

upload.bat的內容如下:
cd d:\temp
d:
tftp.exe -i 192.168.1.2 PUT "my test.xlsx"
另外有幾個要特別留意的問題,在處理過程中比較常遇到的,雖然排除了但我沒有認真回頭去看哪些不需要。
1、vba shell timeout
2、vba shell path
3、vba dir & driver
4、vba shell mode and WScript.Shell
5、chr 34 and double quote (") , and """" & 總之就是雙引號之類的問題


沒有留言:

張貼留言