上午我们收到了一封包含今日定价的自动电子邮件。我在Outlook会话中设置了一个触发器,用于检查每个新电子邮件,如果有主题,则启动脚本。问题是,这个触发器有时只能起作用。我让机器一直运行并且外观打开,但我发现触发器在一段时间后停止工作。通常我只需重新启动outlook - 有时我只需要修改并重新保存代码。
有什么我可以改变以使这个触发更可靠吗?
注意:我无权访问任务计划程序。
更新:我开始收到以下警告:
文件C:\ Users \ me \ AppData \ Local \ Microsoft \ Outlook \ Me@host.com.ost 正在使用中,无法访问。关闭正在使用的任何应用程序 此文件然后再试一次。您可能需要重新启动计算机。
点击OK不会中断脚本的运行 - 但它是否暂停了前进的触发器?
这是脚本:
'Placed in Microsoft Outlook Objects > ThisOutlookSession
Private WithEvents olInboxItems As Items
Private Sub Application_Startup()
Set olInboxItems = Session.GetDefaultFolder(olFolderInbox).Items
End Sub
Private Sub olInboxItems_ItemAdd(ByVal Item As Object)
If TypeOf Item Is mailItem Then
Call handleMessage(Item.EntryID)
End If
End Sub
Public Function handleMessage(strMailItemID As String)
' This function takes an email ID and determines whether it's our pricing sheet email.
Dim mailItem As Outlook.mailItem
Dim path As String, targetSubj As String
Dim result As Boolean
result = False
targetSubj = "Today's Pricing"
Set mailItem = Application.Session.GetItemFromID(strMailItemID)
Debug.Print (mailItem.Subject) 'I use this to test if my script is working
'I find that it logs the subject and then simply cuts off.
If (Mid(mailItem.Subject, 1, Len(targetSubj)) = targetSubj) Then
Debug.Print ("Grabbed Target " & Date)
path = "C:\pathToPricing\Pricing.xls"
mailItem.Attachments.Item(1).SaveAsFile path
Call runExcelMacro("C:\pathToPricing\pricingAuto.xlsm", "processPricing")
result = True
End If
handleMessage = result
End Function
答案 0 :(得分:0)
当一次将大量项目添加到文件夹(大于16)时,不会触发ItemAdd事件 - 这是Outlook中的已知问题。
相反,您可以考虑在Outlook中创建规则,然后分配要运行的VBA宏子。它应该如下所示:
{{1}}
另一种解决方案是使用计时器检查新电子邮件。
您也可以找到以下系列文章: