Outlook任务计划程序以运行访问Subs

时间:2014-10-22 18:37:40

标签: vba ms-access outlook access-vba outlook-vba

我有Access宏,它运行一系列查询,形成表格,并将这些表格发送给多个收件人。这很好,但我越来越多地被要求在一周的某一天提供越来越多的报告。

我可以在Outlook中运行VBA以在某一天运行Access宏,而不是使用我的日历来提醒我打开Access并运行这些宏吗?

1 个答案:

答案 0 :(得分:1)

  

我可以在Outlook中运行VBA以在某一天运行Access宏,而不是使用我的日历来提醒我打开Access并运行这些宏吗?

您可以使用.BAT文件和Windows任务计划程序执行此操作,但您也可以使用Outlook VBA执行此操作。我有一些具有这个目的的日历事件,用于执行代码和清除提醒。

首先,您需要添加一个事件处理程序,以便在设置提醒时触发。

Private WithEvents olRemind As Outlook.Reminders

然后,您需要初始化WithEvents。每次提醒都会发生这种情况,因为我有时会破坏代码或硬停止,这会丢失事件处理程序。

Private Sub Application_Reminder(ByVal Item As Object)
    Set olRemind = Outlook.Reminders
End Sub

然后,您想要在日历上处理该事件。我的设置方式是为想要触发的事件添加特定类别。这有助于使我的日历更清晰。你可以通过各种方式做到这一点。

然后我也解除了提醒,因此它没有出现。

'fire off automatic macros based on recurring reminders
Private Sub olRemind_BeforeReminderShow(Cancel As Boolean)
    Dim objRem As Reminder

    For Each objRem In olRemind
        'get categories
        Dim rmdrCategories As String

        rmdrCategories = objRem.Item.categories

        'call the macro based on category
        If InStr(rmdrCategories, "whateverYouWantTheReminder") > 0 Then

            'only run if this reminder is visible
            If objRem.IsVisible Then

                'This code is specific to whatever macro you want to run
                Dim mydb As Object                
                Set mydb = GetObject("...pathToDatabase.mdb")
                mydb.Application.Run "YourMacroName"
                mydb.Application.Quit
                Set mydb = Nothing


                 objRem.Dismiss
                Cancel = True
            End If

        End If

    Next objRem

End Sub