我有一些用于工作的Outlook VBA代码,它会自动为我的团队成员分配一封电子邮件,以便我们的客户做出响应,并且当它执行此操作时,它还会扫描并向他们提供以后发来的任何电子邮件。相同的电子邮件地址,因此可以一次性处理客户。
我想让它在他们自己的文件夹变空时运行(即他们已经处理了一个客户端,当他们将当前邮件移动到存档时,它会自动运行上面的内容以将其分配给另一个客户端,将其主要收件箱文件夹留空)。
有没有办法做到这一点?我知道我可以将宏设置为每5分钟检查一次,但这会大大降低Outlook的速度。只有当用户的文件夹被清空时才能触发宏?
干杯
克里斯
答案 0 :(得分:0)
Events非常适合这一点。
当进行关键更改时,应用程序会触发事件。这样可以避免使用定时循环。
您可以使用WithEvents语句创建可以处理事件调用的变量。
在此示例中,变量f指向收件箱。每当从该文件夹中删除项目时,都会调用f_BeforeItemMove
过程。它显示剩余的项目数减1。我们减去一个因为事件在删除之前被触发(这使你有机会取消它,如果你愿意的话)。
因为我们正在使用object variable,所以我们需要创建并销毁它。当应用程序启动时会发生这种情况。退出。
Private WithEvents f As Folder ' Inbox folder, used to monitor events.
Private Sub Application_Startup()
' Register for events.
Set f = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
End Sub
Private Sub Application_Quit()
' Unregister.
Set f = Nothing
End Sub
Private Sub f_BeforeItemMove(ByVal Item As Object, ByVal MoveTo As MAPIFolder, Cancel As Boolean)
' Called when an item is moved out of the inbox.
' Display the number of items left, after delete.
MsgBox (f.Items.Count - 1)
End Sub
此代码必须添加到ThisOutlookSession类。如果粘贴到另一个模块中,启动和退出事件将不会触发。
修改强>
上面的原始解决方案是在从收件箱中删除某个项目之前触发的。 OP想要刚刚解雇的代码。这个新的解决方案就是这样做的。
Private WithEvents f As Folder ' Inbox folder, used to monitor events.
Private WithEvents i As Items ' Items within folder above
Private Sub Application_Startup()
' Register for events.
Set f = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
Set i = f.Items
End Sub
Private Sub Application_Quit()
' Unregister.
Set i = Nothing
Set f = Nothing
End Sub
Private Sub i_ItemRemove()
' Called each time an item is moved out of the inbox.
' This can be triggered by moving an item to another folder
' or deleting it.
' Display the new inbox item count.
MsgBox i.Count
End Sub
和以前一样;此代码应放在ThisOutlookSession
内。您需要重新启动Outlook,或手动执行Application_Startup
。
答案 1 :(得分:0)
您可以捕获Items.ItemRemove事件以监视Items.Count属性何时计算为0.在Application_Startup()事件期间调用Initialize_handler()方法:
Public WithEvents myOlItems As Outlook.Items
Public Sub Initialize_handler()
Set myOlItems = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Items
End Sub
Private Sub myOlItems_ItemRemove()
If myOlItems.Count = 0 Then
'Inbox is empty!
End If
End Sub