web-dev-qa-db-ja.com

Outlookで新しいメールを受信した後にマクロを実行するにはどうすればよいですか?

Nagiosサーバーから電子メールとして受信したアラートに基づいてデータベース上にチケットを作成するマクロを書いています。ただし、メールのチェック中にマクロを無限ループで実行させることはできません。マクロがリソースを大量に消費し、デスクトップがハングアップするためです。新しいメールが受信されたときにのみマクロをトリガーする方法を見つける必要があります。

MSDN WebサイトでNewMailイベントに沿って何かを探しましたが、一貫性のあるものは見つかりませんでした。新しいメールイベントからマクロをトリガーする方法を示すサンプルコードを少しだけ見せてもらえますか?

36
Gautam Mainkar

このコードは、デフォルトのローカル受信ボックスにイベントリスナーを追加し、受信メールに対して何らかのアクションを実行します。以下のコードにそのアクションを追加する必要があります。

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を再起動する必要があります。

55
JimmyPena

ThisOutlookSession内で次のようなものを試してください:

Private Sub Application_NewMail()
    Call Your_main_macro
End Sub

電子メールを受信し、そのアプリケーションイベントを開いたときに、Outlook vbaが起動しました。

編集:hello world msgボックスをテストしましたが、メールを受信したときにapplication_newmailイベントで呼び出された後に実行されました。

8
Alistair Weir