2016-06-02 2 views
1

새 전자 메일이받은 편지함에서 수신 될 때 파이썬 스크립트가 실행될 전망에 트리거를 만들어야합니다. 나는이 링크를 참조 않았다 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 

의 어떤 오류를 포기하지 않을하지만 때문에 몇 가지 이유에 내 파이썬 스크립트가 실행되지는 않지만. 이에 따라 Outlook에서 매크로 설정을 구성했으며 사용 가능한 문서에 따라 새로운 규칙을 만들었습니다. 그러나 여전히 의도 된 결과를 얻을 수는 없습니다.

도움을 주시면 감사하겠습니다.

답변

0

test_macro 서브의 이름을 Items_ItemAdd으로 바꿔야합니다. 이 이름이 코드를 복사 한 답에 사용되는 데는 이유가 있습니다. Items_ItemAdd은 서브가 Items이라는 객체의 ItemAdd 이벤트에 대한 이벤트 핸들러임을 의미합니다. 노트의

커플 :

  • 가 초기화하도록 Outlook을 ThisOutlookSession 모듈에 코드를 넣어 다시 시작해야합니다. 이 코드는 표준 모듈에서 작동하지 않습니다.
  • 이 매크로를 실행하기위한 규칙을 설정할 필요가 없습니다. 새 항목이 수신되거나받은 편지함에 추가 될 때마다 실행됩니다.
  • 예를 들어 클래스 인스턴스 (개체)에 대한 클래스 이름을 다시 사용하지 않는 것이 좋습니다. 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 
관련 문제