首页 > 解决方案 > 在阅读窗格中更改为不同的邮件时触发 VBA 代码

问题描述

一旦我阅读了来自特定发件人的新邮件,我想将它们从收件箱移动到子文件夹。

我将 Outlook 设置为在打开邮件后立即将其标记为已读。为了确保我可以阅读邮件,我只想在关闭邮件/更改为其他邮件时移动邮件。(请注意,我正在使用阅读窗格。

我尝试了该Explorer.SelectionChange事件,但当我更改为新邮件时它会触发多次。

Private WithEvents expl As Outlook.Explorer

Private Sub Application_Startup()
    Set expl = Application.ActiveExplorer()
End Sub

Private Sub expl_SelectionChange()
    MsgBox "Selection changed"
End Sub

为什么会触发多次?

如何获得对我正在“关闭”的邮件项目的引用?

标签: vbaemailoutlook

解决方案


为什么会触发多次?

我想(我可能是错的),这是因为View你有。RPO对于orPreview模式,没有注意到上述行为。例如,当您有一个Compact视图时,选择更改会发生两次?第一次选择项目时,第二次显示项目内容时。但就像我说的,我可能是错的......

选择

如果 Outlook 有Application.EnableEvents = FalseMS Excel 之类的,那就更容易了。希望这个替代方案有帮助吗?

Option Explicit

Private WithEvents expl As Outlook.Explorer
Dim DisableEvents As Boolean

Private Sub Application_Startup()
    Set expl = Application.ActiveExplorer()
End Sub

Private Sub expl_SelectionChange()
    If DisableEvents = True Then
        DisableEvents = False
        Exit Sub
    End If
    
    MsgBox "Selection changed"
    
    DisableEvents = True
End Sub

推荐阅读