2016-06-02 11 views
1

新しいメールが受信ボックスに受信されるときにPythonスクリプトが実行されるOutlookで何らかのトリガーを作成する必要があります。私は、このリンクを参照してくださいでした:How do I trigger a macro to run after a new mail is received in Outlook?を、次のスクリプトを書かれている:Outlookでの新しいメールの受信時にスクリプトを実行する

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 test_macro(ByVal item As Object) 
On Error GoTo ErrorHandler 
Dim Msg As Outlook.MailItem 
If TypeName(item) = "MailItem" Then 
    Set Msg = item 
    Ret_Val = Shell("python <path-of-python-script>") 
    Debug.Print "Value: ", Ret_Val 
    If Ret_Val <> 0 Then 
    MsgBox "Couldn't run python script", vbOKOnly 
    End If 
End If 
ProgramExit: 
    Exit Sub 
ErrorHandler: 
    MsgBox Err.Number & " - " & Err.Description 
    Resume ProgramExit 
End Sub 

そのにエラーを与えていないが、何らかの理由により私のPythonスクリプトが実行されていませんが。私はそれに応じてOutlookのマクロ設定を構成し、利用可能なドキュメントに応じて新しいルールを作成しました。しかし、それでも意図した結果を達成することはできません。

何か助けていただければ幸いです。

答えて

0

test_macroサブの名前をItems_ItemAddに変更する必要があります。あなたのコードをコピーしたという答えにその名前が使われる理由があります。 Items_ItemAddは、ItemsというオブジェクトのItemAddイベントのイベントハンドラであることを意味します。ノートの

カップル:

  • ThisOutlookSessionモジュールにコードを入れて、それを初期化するために、Outlookを再起動することを確認します。コードは標準モジュールでは機能しません。
  • このマクロを実行するためのルールを設定する必要はありません。新しいアイテムが受信される(または受信トレイに追加される)たびに実行されます。
  • 私は、クラスインスタンス(オブジェクト)のクラス名を再利用しないことをお勧めします。 Private WithEvents Items As Outlook.Items。それは紛らわしい。
  • これをテストするには、一部のフォルダ(Ctrl + C)から電子メールをコピーし、受信トレイに貼り付けます(Ctrl + V)。マクロを実行する必要があります。

貼り付けたとおり、次のコードを試してみてください。 (私はあなたの混乱の変数名を保持。)

ThisOutlookSession:

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 
    MsgBox "Items_ItemAdd listener initialized." 
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 
     MsgBox "Python script will run now." 
     Ret_Val = Shell("python <path-of-python-script>") 
     Debug.Print "Value: ", Ret_Val 
     If Ret_Val <> 0 Then 
      MsgBox "Couldn't run python script", vbOKOnly 
     End If 
    End If 

ProgramExit: 
    Exit Sub 
ErrorHandler: 
    MsgBox Err.Number & " - " & Err.Description 
    Resume ProgramExit 
End Sub 
関連する問題