2017-09-01 60 views
1

我想寫一個VBA腳本來發送基於日曆提醒的提醒電子郵件,但甚至無法啓動。我無法讓VBA宏識別Outlook事件發生。展望事件不能解僱

我試圖把這個代碼在類模塊:

Public WithEvents myOlApp As Outlook.Application 

Sub Initialize_handler() 
    Set myOlApp = Outlook.Application 'also tried with double quotes around "Outlook.Application" 
End Sub 

Private Sub myOlApp_Reminder(ByVal Item As Object) 
    MsgBox ("test") 
End Sub 

Private Sub myOlApp_NewMail() 
    MsgBox ("test") 
End Sub 

當我得到一個新的電子郵件或設置提醒,走下車,什麼也沒有發生。

我在一個正常的模塊,這個宏測試,它的工作原理:

Sub MsgBoxTest() 
    MsgBox ("test") 
End Sub 

我有「啓用所有宏」,在信任中心的宏設置。

我已經搜索谷歌,stackoverflow,一堆其他網站,並閱讀Microsoft.com上的文檔,並不能找出我失蹤。

我不是程序員(很清楚)。我不知道我是否在我的代碼中遺漏了一些簡單的東西,或者在我的設置中進行了一些設置,導致這種情況變得不可能。

我在運行Windows 10 Enterprise的PC上運行Outlook 2016。

任何建議表示讚賞。

謝謝。

回答

0

對於這種方法,經常在文檔中使用,手動運行Initialize_handler或者在特殊課程模塊ThisOutlookSession中的啓動時運行它。

Private Sub Application_Startup() 
    Initialize_handler 
End Sub 
0

爲了處理提醒事件,需要在一個名爲「Application_Reminder」

子附上你的代碼試試這個:

Option Explicit 

Private Sub Application_Reminder(ByVal Item As Object) 
    MsgBox "Test" 
End Sub 
+0

你忘了說明代碼在ThisOutlookSession中。 – niton

0

類模塊僅僅是爲一個對象藍圖。類模塊本身並不存在,在運行時,類模塊只是一個類型,對象變量可以聲明爲。

你的代碼沒問題(放在公共場所旁邊)。

您只是缺少該類的實例。保持類,使ThisOutlookSession創建它的一個實例:

'[ThisOutlookSession] 
Option Explicit 
Private AppEvents As AppEventsHandler 

Private Sub Application_Startup() 
    Set AppEvents = New AppEventsHandler 
End Sub 

Private Sub Application_Quit() 
    Set AppEvents = Nothing 
End Sub 

VBA類火上建立一個Initialize事件,並銷燬Terminate事件。處理這些設置你Private WithEvents領域:

'[AppEventsHandler] (class module) 
Option Explicit 
Private WithEvents app As Outlook.Application 

Private Sub Class_Initialize() 
    Set app = Outlook.Application 
End Sub 

Private Sub Class_Terminate() 
    Set app = Nothing 
End Sub 

Private Sub app_NewMail() 
    'TODO handle app event 
End Sub 

Private Sub Application_Reminder(ByVal Item As Object) 
    'TODO handle app event 
End Sub 

'...more handlers... 

這就是它 - 現在你正在處理的專用類Outlook.Application事件,不污染ThisOutlookSession與每一個事件處理程序的細枝末節那裏。