BeforeViewSwitch event wordt niet aangeroepen.

Status
Niet open voor verdere reacties.

MDN111

Gebruiker
Lid geworden
13 aug 2007
Berichten
503
Hallo !

Het wil maar niet lukken om de "BeforeViewSwitch" event in Outlook 2010 te laten aanroepen!

Zoals uitgelegd in http://msdn.microsoft.com/en-us/library/aa157807(v=office.10).aspx heb ik de hiernavolgende code in een class module met de naam "Class1" geplaatst:

Code:
Public WithEvents myOlExp As Outlook.Explorer

Public Sub Initialize_handler()
    Set myOlExp = Application.ActiveExplorer
End Sub

Private Sub myOlExp_BeforeViewSwitch(ByVal NewView As Variant, Cancel As Boolean)
    Dim Prompt As String
    Prompt = "Are you sure you want to switch to the " & NewView & " view?"
    If MsgBox(Prompt, vbYesNo + vbQuestion) = vbNo Then Cancel = True
End Sub
In de module "ThisOutlookSession" heb ik dan de hiernavolgende code opgenomen:

Code:
Private Sub Application_Startup()
Dim myClass1 As Class1
Set myClass1 = New Class1
myClass1.Initialize_handler
MsgBox "Application_Startup() fired"
End Sub
Bij het opstarten van Outlook verschijnt de message box, wat er op wijst dat de Application_Startup event wordt doorlopen.

Maar als ik naar een andere view overschakel, wordt de BeforeViewSwitch event niet getriggerd.

Ik heb geen idee wat er fout zit.

Grtz,
MDN111
 

Bijlagen

  • Screenshot.jpg
    Screenshot.jpg
    93,6 KB · Weergaven: 46
Laatst bewerkt:
Ik zou die Class1 vergeten en alle routines gewoon in ThisOutlookSession zetten.
Heb je dat al geprobeerd?
 
Hallo Edmoor !

Bedankt voor de reactie.

Gedaan zoals je voorstelt. Zie screenshot.

Jammer genoeg, zelfde resultaat.

Grtz,
MDN111
 

Bijlagen

  • Screenshot.jpg
    Screenshot.jpg
    98 KB · Weergaven: 49
Je kunt een Klasse module ook niet zomaar overzetten naar ThisOutlookSession lijkt mij.... Overigens is de code ontwikkeld voor XP, volgens je linkje. Ik krijg hem in 2003 in ieder geval ook niet aan de praat; als je hem alleen aanroept in de <Application_Startup> dan snap ik overigens best dat-ie alleen bij het opstarten afvuurt...
 
Neem "Set myOlExp = Application.ActiveExplorer" op in de Application_Startup en vergeet die Initialize_handler.
Bij mij werkt het goed.
 
Laatst bewerkt:
Nog even dit:

Je moet altijd variabelen waarmee je events wil afvangen buiten een procedure, buiten een procedure plaatsen.
Daarbij geldt dat variabelen opgeslagen in klassen dezelfde levensduur hebben als de klasse zelf.
Als je dus een event in een klasse buiten de procedure "Application_Startup" wilt afvangen, moet je deze klasse opnemen in je Thisoutlooksession als (Private)Variable of als deel van een collection. (Private) variabelen buiten procedures behouden hun waarde gedurende de hele Outlook sessie.

"Nadeel" is dat je objecten en collecties moet opruimen vóór het afsluiten van je Outlook, ivm "zwevende" com objecten
 
Laatst bewerkt:
Hallo !

Het lijkt mij het beste om te beginnen met mij te verontschuldigen om jullie, uiteraard ongewild, in het ootje te hebben genomen. De oorzaak van mijn probleem is mijn eigen gebrekkige kennis van Outlook. Alhoewel ik mij redelijk uit de slag kan trekken met Excel-macro's ben ik slechts een beginnend Outlook gebruiker, zoals zal blijken...

Na alles nog een keer grondig bekeken te hebben, ben ik tot de bevinding gekomen dat er geen aparte class module nodig is (zoals jullie al hadden opgemerkt) omdat ThisOutlookSession immers ook een class module is. Ik heb dus de code tot de allereenvoudigste vorm herleid en die staat gewoon in ThisOutlookSession en ze werkt:

Code:
Public WithEvents myOlExp As Outlook.Explorer

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

Private Sub myOlExp_BeforeViewSwitch(ByVal NewView As Variant, Cancel As Boolean)
MsgBox "BeforeViewSwitch() fired"
End Sub

In de drop down list van de macro editor kwamen alle event procedures ter beschikking en ik heb er, bij wijze van test, enkele bijgevoegd in de macro, zoals BeforeItemCopy, FolderSwitch en SelectionChange. Die worden wel allemaal aangeroepen op het gepaste moment. En waarom dan BeforeViewSwitch niet? Wel, omdat ik niet beet had wat een view switch in feite is !!! Ik was in de waan dat het veranderen van de sortering een view switch was omdat dit in de View tab gebeurt. Wat een view switch dan wel is..., daar ben ik nu wel achter gekomen.:o

Nogmaals bedankt voor de reacties en Grtz,
MDN111

PS. Ik zoek in feite een event die in werking treedt bij het wijzigen van de sortering, maar daar zoek ik zelf nog wel even achter...
 
Laatst bewerkt:
Belangrijkste is dat het zover is opgelost.
Bedankt voor het melden :D
 
.. en je Withevents declaratie zou ik gewoon altijd Private doen, want als je en dergelijke gebeurtenis over meerdere modulen wilt gebruiken zou je toch een klassenmodule gebruiken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan