我在Outlook规则中有VBA代码。我希望当我收到带有特定主题的电子邮件时,Outlook开始运行一个脚本。但是,当收到电子邮件时,Outlook会立即开始运行代码,以拾取以前的电子邮件,可能是因为电子邮件刚刚收到,还没有移动到特定的文件夹。
我试过了
Application.Wait (Now + TimeValue("0:00:5"))和
Outlook.Application.Wait (Now + TimeValue("0:00:5"))在抓取电子邮件之前
Set oLookMailitem = Application.ActiveExplorer.CurrentFolder.Items("Apples Sales")VBA显示一个错误
对象不支持此属性或方法
下面是我的代码的开头:错误发生在Application.Wait (Now + TimeValue("0:00:5"))上。
Sub ExportOutlookTableToExcel()
Dim oLookInspector As Inspector
Dim oLookMailitem As MailItem
Dim oLookWordDoc As Word.Document
Dim oLookWordTbl As Word.Table
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlWrkSheet As Excel.Worksheet
Dim Today As String
Today = Date
Application.Wait (Now + TimeValue("0:00:5"))
'Grab Email Item
Set oLookMailitem =Application.ActiveExplorer.CurrentFolder.Items("Apples Sales")
Set oLookInspector = oLookMailitem.GetInspector
Set oLookWordDoc = oLookInspector.WordEditor发布于 2022-01-11 15:35:04
Outlook没有Application.Wait
您可以使用Do循环、Timer和DoEvents来解决这一问题。
Public Sub Sleep(ByVal SleepSeconds As Single)
Dim Tmr As Single
Tmr = Timer
Do While Tmr + SleepSeconds > Timer
DoEvents
Loop
End Sub并将其称为Sleep 5而不是Application.Wait。
发布于 2022-01-11 16:01:51
Application.Wait不是你目标的灵丹妙药!
考虑使用Windows函数来设置计时器,并在触发时运行操作(处理项)。有关详细信息,请参阅Outlook每半小时运行一次代码。
此外,要立即处理传入的电子邮件,您需要处理NewMailEx事件,当新邮件到达收件箱并在客户端规则处理发生之前触发该事件。您可以使用EntryIDCollection数组中返回的条目ID来调用NameSpace.GetItemFromID方法并处理该项。使用此方法时要小心,以尽量减少对Outlook性能的影响。但是,根据客户端计算机上的设置,在新邮件到达收件箱后,可以异步地发生垃圾邮件筛选和将新邮件从收件箱移动到另一个文件夹的客户端规则等进程。您不应该假设在这些事件触发后,收件箱中的项目数量总是会增加一项。
https://stackoverflow.com/questions/70669224
复制相似问题