【发布时间】:2016-03-09 22:05:07
【问题描述】:
我收到了多封电子邮件(每天我收到 3 封电子邮件,用于 3 个类别的订单)。邮件主题格式为:
“订单摘要 - [类别] - [日期]”。
其中[类别] 可以是Category 1、Category 2 或Category 3。 [Date] 是电子邮件的发送日期,格式为 DD/MM/YYYY。
我有一个规则设置来搜索“订单”,然后调用下面的代码。
我想在保存所有电子邮件附件后运行Complete.bat,我只想调用一次。
我已尝试通过创建另一个名为 saveAttachtoDisk_CATEGORY1(itm) 的子程序来实现此目的,该子程序仅在主题中找到“Category 1”时才被调用。然后它会保存附件,但也会搜索主题中的类别 1 并搜索昨天的日期。
我想要一个不依赖于日期的更好的解决方案。全局变量可以在我将变量设置为 1 然后运行Complete.bat 被发送,然后在将来如果变量 = 1 则不要运行Complete.bat。不确定将这个变量放在哪里(全局变量?)因为两个子模块似乎都放错了位置并引用它。
这两个模块都保存在 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
其他模块:
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
【问题讨论】:
-
我会在程序结束时调用SetTimer,超时时间为1秒,并用
SaveSetting保存它的ID,并在程序开始时加载它并清除超时ID .因此,如果每个项目的保存时间少于 1 秒,则只有最后一个项目的超时不会被清除,并且您的计时器回调函数将被调用,您将在其中调用您的批处理文件。 -
"我想在保存所有电子邮件附件后运行 'Complete.bat',我只想调用一次。"每封邮件一次,还是每天一次?目前还不清楚你真正的问题是什么。你能详细说明一下吗?
-
潜在的问题是会有相同的附件名称。您应该在文件名前加上/附加接收日期代码 - 还是让它更独特?由于您从邮件项目中删除了附件,因此您没有任何追溯,我们不知道
Complete.bat做了什么。还在“类别 1”上找到并寻找昨天的一个,然后呢? -
@Tim OP 等待明天在今天的三封邮件上运行批处理文件。问题是如何知道何时收到所有三封邮件并立即运行“在所有电子邮件附件都已保存并且我只想调用一次之后。”
-
当 OP 不在这里(?)来解决任何澄清请求时,有点难以“回答”这个问题。