Nagiosサーバーから電子メールとして受信したアラートに基づいてデータベース上にチケットを作成するマクロを書いています。ただし、メールのチェック中にマクロを無限ループで実行させることはできません。マクロがリソースを大量に消費し、デスクトップがハングアップするためです。新しいメールが受信されたときにのみマクロをトリガーする方法を見つける必要があります。
MSDN WebサイトでNewMailイベントに沿って何かを探しましたが、一貫性のあるものは見つかりませんでした。新しいメールイベントからマクロをトリガーする方法を示すサンプルコードを少しだけ見せてもらえますか?
このコードは、デフォルトのローカル受信ボックスにイベントリスナーを追加し、受信メールに対して何らかのアクションを実行します。以下のコードにそのアクションを追加する必要があります。
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を再起動する必要があります。
ThisOutlookSession
内で次のようなものを試してください:
Private Sub Application_NewMail()
Call Your_main_macro
End Sub
電子メールを受信し、そのアプリケーションイベントを開いたときに、Outlook vbaが起動しました。
編集:hello world msgボックスをテストしましたが、メールを受信したときにapplication_newmail
イベントで呼び出された後に実行されました。