2017-10-25 9 views
1

Outlook 용 VSTO 추가 기능으로 바꿀 VBA 스크립트가 있습니다. VBA에서 Outlook VSTO 추가 기능 사용자 지정 규칙/스크립트

나는 그때 나는이 방법을 선택할 수 있습니다 "스크립트를 실행"으로 규칙을 만들 때 팝업

Public Sub DruckeAnhaenge(oMail As Outlook.MailItem) 

라는 방법이있다. 거기에 "ThisOutlookSession.DruckeAnhaenge"가 있습니다.

이제 VSTO 추가 기능에서 정확히 동일한 방법을 만들었지 만 더 이상 표시되지 않습니다.

시작 메서드가이 추가 기능에서 호출됩니다 (MsgBox로 체크). 그래서 내 질문에 어떻게 VBA 편집기에서 규칙/스크립트로이 메서드를 얻을 수 있습니까?

다음은 추가 기능의 전체 코드입니다.

Public Class ThisAddIn 

    Private Sub ThisAddIn_Startup() Handles Me.Startup 
     MsgBox("Add In wird erfolgreich ausgeführt") 
    End Sub 

    Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown 

    End Sub 

    Private Declare Function ShellExecute Lib "shell32.dll" Alias _ 
     "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, 
     ByVal lpFile As String, ByVal lpParameters As String, 
     ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long 

    Private WithEvents Items As Outlook.Items 

    Public Sub DruckeAnhaenge(oMail As Outlook.MailItem) 
     On Error Resume Next 
     Dim colAtts As Outlook.Attachments 
     Dim oAtt As Outlook.Attachment 
     Dim sFile As String 
     Dim sDirectory As String 
     Dim sFileType As String 

     sDirectory = "C:\Attachments\" 

     'Set colAtts = oMail.Attachments 

     If oMail.Attachments.Count Then 
      For Each oAtt In oMail.Attachments 

       ' This code looks at the last 4 characters in a filename 
       sFileType = LCase$(Right$(oAtt.FileName, 4)) 

       Select Case sFileType 

       ' Add additional file types below 
        Case ".xls", ".doc", ".pdf" 
         sFile = sDirectory & oAtt.FileName 
         oAtt.SaveAsFile(sFile) 
         ShellExecute(0, "print", sFile, vbNullString, vbNullString, 0) 
       End Select 
      Next 
     End If 
    End Sub 
End Class 

답변

1

Outlook에서는 COM 추가 기능을 규칙에 할당 할 수 없습니다. 따라서 OOM에서 제공하는 해당 이벤트를 처리해야합니다. 이 경우받은 편지함에 새 항목을받을 때 발생하는 Application 클래스의 NewMailEx 이벤트를 처리해야합니다. 새 메시지가받은 편지함에 도착하면 클라이언트 규칙 처리가 발생하기 전에 NewMailEx 이벤트가 발생합니다. EntryIDCollection 배열에서 반환 된 항목 ID를 사용하여 GetItemFromID 메서드를 호출하고 항목을 처리 할 수 ​​있습니다. 그런 다음 DruckeAnhaenge 메서드로 호출하여 해당 항목을 전달할 수 있습니다.