Outlook VBA - 收件箱为空时检测?收件箱为空时运行宏?

时间:2016-07-08 08:08:45

标签: vba outlook

我有一些用于工作的Outlook VBA代码,它会自动为我的团队成员分配一封电子邮件,以便我们的客户做出响应,并且当它执行此操作时,它还会扫描并向他们提供以后发来的任何电子邮件。相同的电子邮件地址,因此可以一次性处理客户。

我想让它在他们自己的文件夹变空时运行(即他们已经处理了一个客户端,当他们将当前邮件移动到存档时,它会自动运行上面的内容以将其分配给另一个客户端,将其主要收件箱文件夹留空)。

有没有办法做到这一点?我知道我可以将宏设置为每5分钟检查一次,但这会大大降低Outlook的速度。只有当用户的文件夹被清空时才能触发宏?

干杯

克里斯

2 个答案:

答案 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