debugging 如何从ThisOutlookSession运行VBA?“宏”对话框打开

fquxozlt  于 2022-11-14  发布在  其他
关注(0)|答案(1)|浏览(162)

我正在尝试创建一个宏,该宏将在收件箱中收到新电子邮件时运行,检查电子邮件是否来自某个域,如果不是来自该域,则将发件人添加到“联系人”。
当我按下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

弹出的“宏”窗口的图像。

j8ag8udp

j8ag8udp1#

首先,您需要将函数声明为public才能在列表中看到它们。
您可以设定中断点,并执行F5来执行Startup事件行程常式。ItemAdd事件行程常式只有在项目加入文件夹时才会引发。因此,您也可以设定中断点,并等到它引发为止。
不管怎么说,我建议处理Application类的NewMailEx事件。当新邮件到达收件箱时,在客户端规则处理发生之前,NewMailEx事件将触发。您可以使用EntryIDCollection数组中返回的条目ID来调用NameSpace.GetItemFromID方法并处理该项目。Microsoft Outlook处理每个收到的项目时,此事件都会触发一次。项目可以是几种不同项目类型之一,例如MailItemMeetingItemSharingItemEntryIDsCollection字符串包含与该项对应的条目ID。
最后,您可能会发现Getting started with VBA in Office文章很有帮助。

相关问题