我有一个VBA脚本,我想将其变成Outlook的VSTO加载项。
在VBA中,我有一个名为
的方法Public Sub DruckeAnhaenge(oMail As Outlook.MailItem)
当我使用“运行脚本”创建规则时弹出然后我可以选择此方法。这就是所谓的“ThisOutlookSession.DruckeAnhaenge”。
现在我在Visual Studio中创建了一个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
答案 0 :(得分:1)
Outlook没有提供任何方法将COM加载项分配给规则。因此,您需要处理OOM提供的相应事件。在这种情况下,您需要处理在收件箱中收到新项目时触发的Application类的NewMailEx
事件。当新邮件到达收件箱时以及客户端规则处理发生之前,NewMailEx
事件将触发。您可以使用EntryIDCollection
数组中返回的条目ID来调用GetItemFromID方法并处理该项目。然后你可以调用DruckeAnhaenge
方法并将项目传递给那里。