11

我没有运气在显示之前以编程方式关闭 Outlook 警报。

Private Sub Application_Reminder(ByVal Item As Object)
    Dim objRem As Reminder
    Dim objRems As Reminders
    If Item.Subject = "TESTING" Then
        'downloadAndSendSpreadReport
        Set objRems = Application.Reminders
        i = 0
        For Each objRem In objRems
            i = i + 1
            If objRem.Caption = "TESTING" Then
                objRems.Remove i
                If objRem.IsVisible Then
                    objRem.Dismiss
                End If
                Exit For
            End If
        Next objRem
        Item.ReminderSet = False
        Item.Delete
        'Item.Dismiss
    End If
End Sub

我想将此约会项目用作某些宏的触发器,而无需用户手动关闭提醒。

在我看来,触发此事件时,提醒项不可见,因此无法关闭

我试图从提醒集中删除它,但这似乎从我的日历中删除了整个事件。此外,它仍会显示非 ASCII 格式的 STRANGE TITLE 提醒。

我尝试将约会项的remindSet属性设置为false,提示属性还是弹出来。

所以我正在寻找一种方法来a)在提醒自动弹出之前将其关闭/b)。在它自动弹出后关闭提醒......或在 Outlook 中执行预定的 MACRO 的任何解决方法。(请注意,我无权在 Windows 或 VBS 中使用计划作业。)

更新:

现在我有以下代码。提醒正在被删除,但它仍会弹出一个提醒窗口,其标题为“没有约会/提醒”之类的标题。

beforeReminderShow 事件在提醒对象 isVisible = true 的意义上很有用

所以我可以解雇..但即使有 0 个事件,提醒窗口也会继续弹出。

Private WithEvents olRemind As Outlook.Reminders
Private Sub olRemind_BeforeReminderShow(Cancel As Boolean)
Set objRems = Application.Reminders
    For Each objRem In objRems
        If objRem.Caption = "TESTING" Then
            If objRem.IsVisible Then
                objRem.Dismiss
            End If
            Exit For
        End If
    Next objRem

End Sub

[已解决] - 最终编辑
最终解决方案可行(我放在“ThisOutlookSession”模块中)。希望这对其他人有帮助。

' declare this object withEvents displaying all the events
Private WithEvents olRemind As Outlook.Reminders
Private Sub Application_Reminder(ByVal Item As Object)
    Set olRemind = Outlook.Reminders
    ' RUN OTHER MACRO HERE
End Sub

Private Sub olRemind_BeforeReminderShow(Cancel As Boolean)

    For Each objRem In olRemind
        If objRem.Caption = "TESTING" Then
            If objRem.IsVisible Then
                objRem.Dismiss
                Cancel = True
            End If
            Exit For
        End If
    Next objRem

End Sub
4

2 回答 2

5

我知道如何做到这一点的唯一方法如下。

您需要在模块/类的顶部使用它:

Private WithEvents olRemind As Outlook.Reminders

然后,当您获得 Outlook 对象时,您需要执行以下操作:

Set olRemind = olApp.Reminders

olApp您的 Outlook 应用程序对象在哪里。

现在在你的代码中你需要有这个事件:

Private Sub olRemind_BeforeReminderShow(Cancel As Boolean)

将 放在WithEvents顶部后,您将能够看到所有可以使用的事件。

现在您可以取消此事件,因此看不到提醒窗口。

于 2012-11-09T10:13:08.557 回答
5

如果要关闭所有提醒,只需实现以下代码(声明此对象WithEvents显示所有事件):

Private WithEvents olRemind As Outlook.Reminders

Private Sub Application_Reminder(ByVal Item As Object)
    Set olRemind = Outlook.Reminders
    ' RUN OTHER MACRO HERE
End Sub

Private Sub olRemind_BeforeReminderShow(Cancel As Boolean)
    Cancel = True          
End Sub
于 2013-04-08T10:59:33.280 回答