我正在尝试创建一个宏,该宏将在收件箱中收到新电子邮件时运行,检查电子邮件是否来自某个域,如果不是来自该域,则将发件人添加到“联系人”。
当我按下F5(运行)或F8(单步执行)时,我得到的只是弹出的“宏”窗口和一个编钟声。我试过关闭Outlook并重新打开,然后再次运行。同样的事情。
在2004年之前,我曾广泛使用Excel和Access VBA。
代码在ThisOutlookSession中。我使用的是Microsoft365(最新版本)中的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 Items_ItemAdd(ByVal item As Object)
On Error GoTo ErrorHandler
Dim Msg As Outlook.MailItem
If TypeName(item) = "MailItem" Then
Set Msg = item
MsgBox "This is fun"
End If
ProgramExit:
Exit Sub
ErrorHandler:
MsgBox Err.Number & " - " & Err.Description
Resume ProgramExit
End Sub
弹出的“宏”窗口的图像。
1条答案
按热度按时间j8ag8udp1#
首先,您需要将函数声明为public才能在列表中看到它们。
您可以设定中断点,并执行F5来执行
Startup
事件行程常式。ItemAdd
事件行程常式只有在项目加入文件夹时才会引发。因此,您也可以设定中断点,并等到它引发为止。不管怎么说,我建议处理
Application
类的NewMailEx
事件。当新邮件到达收件箱时,在客户端规则处理发生之前,NewMailEx
事件将触发。您可以使用EntryIDCollection
数组中返回的条目ID来调用NameSpace.GetItemFromID
方法并处理该项目。Microsoft Outlook处理每个收到的项目时,此事件都会触发一次。项目可以是几种不同项目类型之一,例如MailItem
、MeetingItem
或SharingItem
。EntryIDsCollection
字符串包含与该项对应的条目ID。最后,您可能会发现Getting started with VBA in Office文章很有帮助。