我正在编写一个宏,根据从Nagios服务器收到的警报作为电子邮件在数据库上创建票证。但是,我不能让宏在检查邮件时在无限循环中运行,因为它太资源太重而使我的桌面挂起。我需要找到一种方法只在收到新邮件时触发宏。
我在MSDN网站上查找了NewMail事件的内容,但我找不到任何连贯的内容。任何人都可以向我展示一些示例代码,以展示如何从新邮件事件中触发宏吗?
答案 0 :(得分:53)
此代码会将事件侦听器添加到默认的本地收件箱,然后对传入的电子邮件执行某些操作。您需要在下面的代码中添加该操作。
Private WithEvents Items As Outlook.Items
Private Sub Application_Startup()
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
End Sub
Private Sub Items_ItemAdd(ByVal item As Object)
On Error Goto ErrorHandler
Dim Msg As Outlook.MailItem
If TypeName(item) = "MailItem" Then
Set Msg = item
' ******************
' do something here
' ******************
End If
ProgramExit:
Exit Sub
ErrorHandler:
MsgBox Err.Number & " - " & Err.Description
Resume ProgramExit
End Sub
粘贴ThisOutlookSession
模块中的代码后,必须重新启动Outlook。
答案 1 :(得分:8)
在ThisOutlookSession
内尝试类似的内容:
Private Sub Application_NewMail()
Call Your_main_macro
End Sub
当我收到一封电子邮件并打开该应用程序事件时,我的outlook vba刚刚解雇。
编辑:我刚测试了一个hello world msg框,它在收到电子邮件后在application_newmail
事件中被调用后运行。