2017-09-01 8 views
1

Ich versuche, einen VBA-Skript zu schreiben, um eine Erinnerung E-Mail zu senden, basierend auf einer Kalendererinnerung abgehend, aber nicht einmal beginnen kann. Ich habe Probleme, VBA-Makros zu erkennen, dass ein Outlook-Ereignis aufgetreten ist.Outlook Ereignisse Brennen nicht

Ich habe versucht, diesen Code in einem Klassenmodul setzen:

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 

Wenn ich eine neue E-Mail erhalten oder eine Erinnerung gehen gesetzt, passiert nichts.

ich mit diesem Makro in einem normalen Modul getestet haben und es funktioniert:

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

Ich habe Makro-Einstellungen auf „Alle Makros aktivieren“ im Trust-Center.

Ich habe google gesucht, Stackoverflow, eine Reihe von anderen Websites, und die Dokumentation auf Microsoft.com gelesen und kann nicht herausfinden, was mir fehlt.

Ich bin kein Programmierer (klar). Ich weiß nicht, ob ich etwas Einfaches in meinem Code verpasse oder eine Einstellung in meinem Setup, die das unmöglich macht.

Ich bin auf dem Outlook 2016 auf einem PC mit Windows 10 Unternehmen ausgeführt wird.

Alle Vorschläge geschätzt.

Danke.

Antwort

0

Für diese Methode häufig in der Dokumentation verwendet werden, laufen Initialize_handler manuell oder führen Sie es beim Start in der speziellen Klasse Modul ThisOutlookSession.

Private Sub Application_Startup() 
    Initialize_handler 
End Sub 
0

Um Erinnerung Ereignisse zu behandeln, müssen Sie Ihren Code in einer Sub namens "Application_Reminder"

diese

Versuchen einzuschließen:

Option Explicit 

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

Sie haben vergessen, den Code geht in Dieseoutlooksitzung anzuzeigen. – niton

0

Ein Klassenmodul ist nur ein Bauplan für ein Objekt. Ein Klassenmodul existiert nicht von selbst. Zur Laufzeit ist ein Klassenmodul nur ein Typ, für den eine Objektvariable deklariert werden kann.

Der Code ist in Ordnung (öffentlichen Bereich durchgesickert beiseite).

Sie vermissen nur eine Instanz dieser Klasse. Halten Sie die Klasse und machen ThisOutlookSession erstellen eine Instanz davon:

'[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 Klassen feuern eine Initialize Ereignis auf Schöpfung und ein Terminate Ereignis auf Zerstörung. Fassen Sie Ihre Private WithEvents Feld setzen:

'[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... 

Das ist es - jetzt bist du Outlook.Application Ereignisse in einem eigenen Klasse Handling, ohne ThisOutlookSession verschmutzen mit den winzigsten Details jeder Event-Handler gibt.

Verwandte Themen