如何在Outlook中收到新邮件后触发宏运行?

Gau*_*kar 38 outlook vba triggers outlook-vba

我正在编写一个宏,它根据从Nagios服务器收到的警报作为电子邮件在数据库上创建票证.但是,我不能让宏在检查邮件时在无限循环中运行,因为它太资源太重而使我的桌面挂起.我需要找到一种方法只在收到新邮件时触发宏.

我在MSDN网站上查找了NewMail事件的内容,但我找不到任何连贯的内容.任何人都可以向我展示一些示例代码,以显示如何从新邮件事件中触发宏吗?

Jim*_*ena 55

此代码将向默认的本地收件箱添加事件侦听器,然后对传入的电子邮件执行某些操作.您需要在下面的代码中添加该操作.

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
Run Code Online (Sandbox Code Playgroud)

粘贴ThisOutlookSession模块中的代码后,必须重新启动Outlook.

  • @JimmyPena在哪里调用Items_ItemAdd? (8认同)
  • 我不好,宏禁用了。愚蠢的是,这种情况下并没有不同级别的宏安全性。 (2认同)
  • 在前几分钟内可用于前几封电子邮件,然后突然停止触发。知道为什么吗? (2认同)

Ali*_*eir 8

尝试这样的内容ThisOutlookSession:

Private Sub Application_NewMail()
    Call Your_main_macro
End Sub
Run Code Online (Sandbox Code Playgroud)

当我收到一封电子邮件并打开该应用程序事件时,我的outlook vba就被解雇了.

编辑:我刚测试了一个hello world msg框,它在application_newmail收到电子邮件后在活动中被调用后运行.