Tôi có nhiều email đến (Mỗi ngày tôi nhận được 3 email cho Đơn đặt hàng cho 3 Danh mục). Chủ đề email có định dạng:Thực thi tập lệnh batch một lần cho nhiều email
"ĐƠN ĐẶT HÀNG TẮT - [Danh mục] - [Ngày]".
Nơi [Danh mục] có thể là Category 1
, Category 2
hoặc Category 3
. [Ngày] là ngày email được gửi ở định dạng DD/MM/YYYY.
Tôi có cài đặt quy tắc để tìm kiếm 'Đơn đặt hàng' rồi gọi mã bên dưới.
Tôi muốn chạy Complete.bat
sau khi tất cả các tệp đính kèm email đã được lưu và tôi chỉ muốn gọi nó một lần.
Tôi đã cố gắng thực hiện việc này bằng cách tạo một phụ khác có tên là saveAttachtoDisk_CATEGORY1(itm)
chỉ được gọi khi tìm thấy "Danh mục 1" trong chủ đề. Sau đó, nó lưu tệp đính kèm nhưng cũng tìm kiếm một danh mục 1 trong chủ đề VÀ cũng tìm kiếm ngày hôm qua.
Tôi muốn một giải pháp tốt hơn không phụ thuộc vào ngày tháng. Biến toàn cầu có thể hoạt động ở nơi tôi đặt biến là 1 sau đó chạy Complete.bat
được gửi và sau đó trong tương lai nếu biến = 1 thì không chạy Complete.bat
. Bạn không chắc chắn nên đặt biến này ở đâu (Biến toàn cục?) Vì cả hai mô-đun phụ dường như không đúng chỗ để đặt biến này và tham chiếu nó.
Cả hai mô-đun này đều được lưu trong phần 'Mô-đun' của Microsoft Outlook VBA.
Public Sub saveAttachtoDisk(itm As Outlook.MailItem)
Dim objAtt As Outlook.Attachment
Dim SaveFolder As String
SaveFolder = "D:\Orders\"
For Each objAtt In itm.Attachments
objAtt.SaveAsFile SaveFolder & "\" & objAtt.DisplayName
objAtt.Delete
Next
itm.Save
End Sub
mô-đun khác:
Public Sub saveAttachtoDisk_CATEGORY1(itm As Outlook.MailItem)
Dim objAtt As Outlook.Attachment
Dim SaveFolder As String
SaveFolder = "D:\Orders\"
For Each objAtt In itm.Attachments
objAtt.SaveAsFile SaveFolder & "\" & objAtt.DisplayName
objAtt.Delete
Next
itm.Save
If InStr(1, itm.Subject, "ORDERS EXTRACT - Category 1 -" & Format(Date, "dd/mm/yyyy")) Then
Shell "D:\Orders\Complete.bat"
End If
End Sub
Tôi sẽ gọi [SetTimer] (http://stackoverflow.com/q/20269844/3959875) với thời gian chờ là 1 giây ở cuối quy trình và lưu ID của nó bằng 'SaveSetting' và khi bắt đầu quy trình tải nó và xóa ID hết thời gian chờ. Vì vậy, nếu tiết kiệm của mỗi mục mất ít hơn 1 giây chỉ thời gian chờ của mục cuối cùng sẽ không bị xóa và chức năng gọi lại bộ đếm thời gian của bạn sẽ được gọi, nơi bạn sẽ gọi tệp lô của bạn. – wOxxOm
"Tôi muốn chạy 'Complete.bat' sau khi tất cả các tập tin đính kèm email đã được lưu và tôi chỉ muốn gọi nó một lần." Một lần cho mỗi thư, hoặc mỗi ngày? Nó không phải là rõ ràng vấn đề thực sự của bạn là gì. Bạn có thể xây dựng một chút không? –
Vấn đề tiềm năng là sẽ có cùng một tên tệp đính kèm. Bạn có nên thêm tiền tố/nối mã Ngày đã nhận vào tên tệp - hoặc một cái gì đó làm cho nó độc đáo hơn không? Vì bạn loại bỏ các tập tin đính kèm từ mục thư, không có dấu vết trở lại vào cuối của bạn và chúng tôi không biết những gì 'Complete.bat' nào. Cũng trên "Danh mục 1" được tìm thấy và tìm kiếm một ngày hôm qua, sau đó những gì? – PatricK