我已经(使用SO的信息)实现了一个VBA宏,该宏将在Outlook规则中删除“运行脚本”选项后运行以处理新电子邮件。我这样做如下:
Private WithEvents Items As Outlook.Items
Public Sub Application_Startup()
' Add an inbox event listener
Dim olApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Set olApp = Outlook.Application
Set objNS = olApp.GetNamespace("MAPI")
' default local Inbox
Set Items = objNS.GetDefaultFolder(olFolderInbox).Items
MsgBox "Startup macro run"
End Sub
Private Sub Items_ItemAdd(ByVal item As Object)
'Do something on new email arrival
.
.
.
End Sub
但是收件箱侦听器似乎经常停止工作,我要么必须重新启动Outlook,要么手动重新运行“启动”宏才能使其恢复工作-这似乎是一个常见的问题,没有解决方法。
问题-我不是VBA专家,我想知道是否可以简单地重新运行'Application_Startup'宏以在'Items_ItemAdd(ByVal item As Object)'
末尾重新启动侦听器宏?
答案 0 :(得分:1)
如果您需要重置ItemAdd
事件处理程序,我认为使用ItemAdd
来做到这一点没有任何意义。
您既可以使用计时器(VBA中不存在),也可以使用其他事件或多或少触发一次,例如Explorer.SelectionChange
事件(Explorer
可以从Application.ActiveExplorer
。
答案 1 :(得分:0)
您可以添加一个新的宏,该宏执行Application_Startup
事件中最初存在的操作。然后您可以稍后在Items_ItemAdd
宏的末尾引用该子项。
Private WithEvents Items As Outlook.Items
Public Sub Application_Startup()
Call startupevents
End Sub
Sub startupevents()
' Add an inbox event listener
Dim olApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Set olApp = Outlook.Application
Set objNS = olApp.GetNamespace("MAPI")
' default local Inbox
Set Items = objNS.GetDefaultFolder(olFolderInbox).Items
MsgBox "Startup macro run"
End Sub
Private Sub Items_ItemAdd(ByVal item As Object)
'Do something on new email arrival
'
'
'
Call startupevents
End Sub
答案 2 :(得分:0)
简单的代码可能会产生影响。
Private WithEvents Items As Outlook.Items
Public Sub Application_Startup()
' Add an inbox event listener
Dim objNS As Outlook.NameSpace
' The code is in Outlook, not being called, for example, from Excel.
Set objNS = Session.GetNamespace("MAPI")
' default local Inbox
Set Items = objNS.GetDefaultFolder(olFolderInbox).Items
MsgBox "Startup macro run"
End Sub
如果上述操作没有影响,则可能会足够频繁地重新运行Application_Startup。
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Application_Startup
End Sub