2012-06-29 19 views
26

私はNagiosサーバーから電子メールとして受け取ったアラートに基づいてデータベースにチケットを作成するマクロを書いています。しかし、メールをチェックしている間、無限ループでマクロを実行させることはできません。リソースが重すぎてデスクトップがハングアップするためです。私は新しいメールが受信されたときにのみマクロをトリガーする方法を見つける必要があります。Outlookで新しいメールを受信した後にマクロを起動するにはどうすればよいですか?

MSDN WebサイトのNewMailイベントの行に沿って何かを探しましたが、一貫したものは見つかりませんでした。誰かが私に新しいメールイベントからマクロをトリガする方法を示すちょっとしたサンプルコードを表示できますか?

答えて

44

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

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

+0

Outlook Professional Plus 2010で動作しません – Superdooperhero

+1

私の悪い、マクロが無効になっています。しかし、このシナリオではマクロセキュリティのレベルは異なりません。 – Superdooperhero

+6

@JimmyPena Items_ItemAddはどこに呼び出されますか? –

6

ThisOutlookSession内部でこのような何かを試してみてください:

Private Sub Application_NewMail() 
    Call Your_main_macro 
End Sub 

私が電子メールを受信して​​開いているアプリケーションのイベントがあったとき、私の見通しのVBAだけで解雇しました。

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

+0

私はそれが働いていないように思えます。マクロを実行してメールを送信しようとしましたが、すべてを再初期化するまでマクロを実行できませんでした。その問題はどういうものだと思いますか? –

+0

私の答えにはどこのコードがありますか?私はそれを 'ThisOutlookSession'に置き、残しました。メールを受け取ったときにトリガーするマクロを実行する必要はありません。 –

+0

ThisOutlookSessionにペーストしましたが、実行中に多くの問題が発生しています。私は問題の根源を指摘することすらできません。私のサブはまったくランダムなものです。 –

関連する問題