【发布时间】:2022-06-21 22:12:03
【问题描述】:
我实现了作为答案 here 提供的代码,以在每次主题为“Blah”的电子邮件进入我的收件箱时运行 Python 脚本。
我正在尝试实现代码,每当主题为“Woo”的电子邮件进入我的收件箱中的子文件夹时,就会在 单独的 Excel 电子表格 main.xlsx 上运行宏。 p>
要获取此子文件夹中的所有项目,我有
Set productionItems = objectNS.GetDefaultFolder(olFolderInbox).Folders("Production Emails").Items
作为实现目标的一步,我想在每次名为“Woo”的邮件到达收件箱的“Production Emails”子文件夹时生成一条带有Debug.Print(或消息框)的消息。
当我向自己发送一封主题为“Woo”的电子邮件时,我没有收到 Debug.Print 消息“Arrived3”,这是我所期望的。
Option Explicit
Private WithEvents inboxItems As Outlook.Items
Private WithEvents productionItems As Outlook.Items [!!!]
Public Sub Application_Startup()
Dim outlookApp As Outlook.Application
Dim objectNS As Outlook.NameSpace
Set outlookApp = Outlook.Application
Set objectNS = outlookApp.GetNamespace("MAPI")
Set inboxItems = objectNS.GetDefaultFolder(olFolderInbox).Items
Set productionItems = objectNS.GetDefaultFolder(olFolderInbox).Folders("Production Emails").Items
End Sub
Private Sub inboxItems_ItemAdd(ByVal Item As Object)
On Error GoTo ErrorHandler
Dim Msg As Outlook.MailItem
Dim MessageInfo
Dim Result
If TypeName(Item) = "MailItem" Then
Debug.Print "Arrived3"
If Item.Subject = "Blah" Then
Const PyExe = "C:\...\python.exe"
Const PyScript = "R:\...\main.py"
Dim objShell As Object, cmd As String
Set objShell = CreateObject("Wscript.Shell")
cmd = PyExe & " " & PyScript
Debug.Print cmd
objShell.Run cmd
objShell.exec cmd
MsgBox objShell.exec(cmd).StdOut.ReadAll
End If
End If
ExitNewItem:
Exit Sub
ErrorHandler:
MsgBox Err.Number & " - " & Err.Description
Resume ExitNewItem
End Sub
【问题讨论】:
-
将
Private Sub inboxItems_ItemAdd(ByVal Item As Object)替换为Private Sub productionItems_ItemAdd(ByVal Item As Object)。