Vba 在outlook中收到新电子邮件时执行脚本

Vba 在outlook中收到新电子邮件时执行脚本,vba,outlook,Vba,Outlook,我需要在outlook中创建某种触发器,当收件箱中收到新电子邮件时,将执行python脚本。我确实参考了此链接:并编写了以下脚本: 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

我需要在outlook中创建某种触发器,当收件箱中收到新电子邮件时,将执行python脚本。我确实参考了此链接:并编写了以下脚本:

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
Private,事件项作为Outlook.Items
私有子应用程序_启动()
Dim olApp作为Outlook.Application
将对象设置为Outlook.NameSpace
设置olApp=Outlook.Application
Set objNS=olApp.GetNamespace(“MAPI”)
默认本地收件箱
Set Items=objNS.GetDefaultFolder(olFolderInbox).Items
端接头
专用子测试_宏(ByVal项作为对象)
关于错误转到错误处理程序
将消息作为Outlook.mailtim
如果TypeName(item)=“MailItem”,则
设置Msg=item
Ret_Val=Shell(“python”)
调试。打印“值:”,返回值
如果返回值为0,则
MsgBox“无法运行python脚本”,仅vbOKOnly
如果结束
如果结束
程序退出:
出口接头
错误处理程序:
MsgBox错误编号&“-”&错误说明
恢复程序退出
端接头
虽然它没有给出任何错误,但由于某些原因,我的python脚本没有执行。我已在outlook中相应地配置了宏设置,并根据可用文档创建了新规则。但仍然无法达到预期的效果


非常感谢您的帮助。

您需要将您的
test\u宏
sub重命名为
Items\u ItemAdd
。在您复制代码的答案中使用该名称是有原因的
Items\u ItemAdd
表示子项是名为
Items
的对象的
ItemAdd
事件的事件处理程序

两个注释:

  • 确保将您的代码放入
    ThisOutlookSession
    模块,然后重新启动Outlook对其进行初始化。该代码在标准模块中不起作用
  • 运行此宏不需要设置任何规则。每当收到(或添加到收件箱)新项目时,它都将运行
  • 我建议不要像您在
    Private with events Items as Outlook.Items中那样,对类实例(对象)重用类名。这令人困惑
  • 要测试这一点,只需从某个文件夹(Ctrl+C)复制一封电子邮件,并将其粘贴到您的收件箱(Ctrl+V)。宏应该运行
请完全按照我粘贴的方式尝试以下代码。(我保留了令人困惑的变量名。)

本期展望课程:

Private,事件项作为Outlook.Items
私有子应用程序_启动()
Dim olApp作为Outlook.Application
将对象设置为Outlook.NameSpace
设置olApp=Outlook.Application
Set objNS=olApp.GetNamespace(“MAPI”)
'默认本地收件箱
Set Items=objNS.GetDefaultFolder(olFolderInbox).Items
MsgBox“Items\u ItemAdd侦听器已初始化。”
端接头
私有子项\u ItemAdd(ByVal项作为对象)
关于错误转到错误处理程序
将消息作为Outlook.mailtim
如果TypeName(Item)=“MailItem”,则
设置Msg=Item
MsgBox“Python脚本现在将运行。”
Ret_Val=Shell(“python”)
调试。打印“值:”,返回值
如果返回值为0,则
MsgBox“无法运行python脚本”,仅vbOKOnly
如果结束
如果结束
程序退出:
出口接头
错误处理程序:
MsgBox错误编号&“-”&错误说明
恢复程序退出
端接头

您需要将
test\u宏
sub重命名为
Items\u ItemAdd
。在您复制代码的答案中使用该名称是有原因的
Items\u ItemAdd
表示子项是名为
Items
的对象的
ItemAdd
事件的事件处理程序

两个注释:

  • 确保将您的代码放入
    ThisOutlookSession
    模块,然后重新启动Outlook对其进行初始化。该代码在标准模块中不起作用
  • 运行此宏不需要设置任何规则。每当收到(或添加到收件箱)新项目时,它都将运行
  • 我建议不要像您在
    Private with events Items as Outlook.Items中那样,对类实例(对象)重用类名。这令人困惑
  • 要测试这一点,只需从某个文件夹(Ctrl+C)复制一封电子邮件,并将其粘贴到您的收件箱(Ctrl+V)。宏应该运行
请完全按照我粘贴的方式尝试以下代码。(我保留了令人困惑的变量名。)

本期展望课程:

Private,事件项作为Outlook.Items
私有子应用程序_启动()
Dim olApp作为Outlook.Application
将对象设置为Outlook.NameSpace
设置olApp=Outlook.Application
Set objNS=olApp.GetNamespace(“MAPI”)
'默认本地收件箱
Set Items=objNS.GetDefaultFolder(olFolderInbox).Items
MsgBox“Items\u ItemAdd侦听器已初始化。”
端接头
私有子项\u ItemAdd(ByVal项作为对象)
关于错误转到错误处理程序
将消息作为Outlook.mailtim
如果TypeName(Item)=“MailItem”,则
设置Msg=Item
MsgBox“Python脚本现在将运行。”
Ret_Val=Shell(“python”)
调试。打印“值:”,返回值
如果返回值为0,则
MsgBox“无法运行python脚本”,仅vbOKOnly
如果结束
如果结束
程序退出:
出口接头
错误处理程序:
MsgBox错误编号&“-”&错误说明
恢复程序退出
端接头
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