430 likes | 569 Views
VBA Outlook II. Sessie B2 Floris M. Kleijne. Onderwerpen sessie B1. . . . . . . . . . 3. Itembalken aanpassen. Werkbalken aanpassen=Office-standaard Máár… Alle soorten items zelfde CommandBars Aanpassingen zullen vaak specifiek zijn voor Mail óf Contact óf Note etc.
E N D
VBA Outlook II Sessie B2 Floris M. Kleijne
Onderwerpen sessie B1
3. Itembalken aanpassen • Werkbalken aanpassen=Office-standaard • Máár… • Alle soorten items zelfde CommandBars • Aanpassingen zullen vaak specifiek zijn voor Mail óf Contact óf Note etc. • Dus… code! • Om eigen balken te tonen en verbergen • Afhankelijk van welk item wordt weergegeven
3. Itembalken aanpassen • Objecten en technieken • Application en Session • Explorer en Inspector • Events • CommandBars
Application en Session Dim nsp As Outlook.NameSpace ' "Session" was betere naam geweest!! Set nsp = Application.GetNameSpace("MAPI") Set nsp = Application.Session ' (sinds Outlook 98)
Application en Session Application.ActiveExplorer 'Het applicatievenster Application.CreateItem(olAppointmentItem) 'Maak een nieuwe afspraak nsp.GetDefaultFolder(olFolderContacts) 'Folder Contactpersonen nsp.PickFolder 'Laat de gebruiker een folder kiezen
Explorer en Inspector • Explorer = applicatie-venster • Inspector = venster van geopend item
Explorer en Inspector Set xpl = ActiveExplorer xpl.Selection.Items(1).Display Set ins = ActiveInspector MsgBox ins.CurrentItem.FullName
Events • Wanneer moet een bepaalde macro worden uitgevoerd? • Bij opstarten Outlook • Bij binnenkomst nieuwe mail • Als er een itemvenster (Inspector) wordt geopend • Bij toevoegen Snelkoppeling aan Outlookbalk • Het juiste Event voor elk moment!
Events • Standaard alleen Application-events • Andere Events beschikbaar maken • Variabele WithEvents declareren • Initialiseren in Application_Startup • Kan alléén in Class module • ThisOutlookSession is óók een class module
Events Private WithEvents insps As Outlook.Inspectors Sub Application_Startup() Set insps = Application.Inspectors End Sub Sub insps_NewInspector(Byval ins As Inspector) ' Item geopend, doe er iets mee ' Bijv. werkbalken aanpassen ' afhankelijk van het sóórt item in de Inspector End Sub
CommandBars • Balken en knoppen maken(zelfde als andere Office-applicaties): ' Werkbalk maken Dim cmb As Office.CommandBar Set cmb = …CommandBars.Add(…) cmb.Visible = True 'Knop op werkbalk maken Dim btn As Office.CommandBarButton Set btn = cmb.Controls.Add(…) btn.Caption = "Mijn macro uitvoeren" btn.OnAction = "MijnMacro"
CommandBars ActiveExplorer.CommandBars ActiveInspector.CommandBars
CommandBars • ActiveInspector.CommandBars = alle CommandBars van alle Inspectors • Dus MailItem, AppointmentItem, ContactItem etc. • Alle Inspector-vensters zelfde balken! • Voeg balk toe aan e-mail-Inspector werkbalk ook in Contact of Appointment • Code schrijven om dit te verhinderen! • Zie Casus 3
Bedankt voor uw aandacht! • www.nationaleofficedag.com • Downloaden: • Deze presentatie • Voorbeeldcode (alle casi!) • Overige documentatie
6. Meldingen nieuwe e-mail • Tijdelijk automatisch melding bij nieuwe e-mail in bepaalde mappen • Bijvoorbeeld tijdens project • Klant wil makkelijk waarschuwingen aanzetten voor gekozen map (en weer makkelijk uitzetten) • Regels en Waarschuwingen te bewerkelijk • Dus graag VBA-oplossing • NB: Dus combi met autom. sorteren(casus
6. Meldingen nieuwe e-mail • Makkelijk beheer Meldingen-mappen:Outlook-balk / snelkoppelingen • Automatische meldingen voorelke map die daar een snelkoppeling heeft • (Minstens) twéé mogelijke benaderingen • …
6. Meldingen nieuwe e-mail • Objecten en technieken • Application en Session • Explorer en Inspector • Folders • Items • Events • De Outlook-balk
Folders Dim fld As Outlook.MAPIFolder Set fld = Application.Session. _Folders("Persoonlijke mappen") Set fld = fld.Folders("Inbox") 'etc 'of Set fld = Application.Session. _GetDefaultFolder(olFolderInbox)
Folders • Recursie!! Public Sub DoorloopSubFolders(ByRef Map _As MAPIFolder) Dim fld As Outlook.MAPIFolder 'Doe eerst "iets" met de Map For Each fld In Map.Folders Call DoorloopSubFolders(fld) Next fld End Sub
Items • Alles wat zich in een Outlook-folder kan bevinden • E-mail, Contactpersoon, Notitie etc. etc. • Gemengde inhoud van Folders • Bijv. Email en Vergaderverzoek • Bijv. Contactpersoon en Distributielijst • Item datatype is Object
Items • Alle items doorlopen!! Public Sub DoorloopItems(ByRef Map As MAPIFolder) Dim itm As Object Dim eml As Outlook.MailItem For Each itm In Map.Items IfTypeOf itm Is Outlook.MailItem Then Set eml = itm 'Doe iets met het gevonden mailtje End If Next itm End Sub
Items • Nieuw Item maken Dim con As Outlook.ContactItem Set con = Application.CreateItem(olContactItem) With con .FirstName = "Jan" .LastName = "Jansen" .Display .Save End With
De Outlook-balk Dim xpl As Explorer Dim pne As OutlookBarPane Dim str As OutlookBarStorage Dim grp As OutlookBarGroup Dim sct As OutlookBarShortCut Set xpl = ActiveExplorer Set pne = xpl.Panes("OutlookBar") Set str = pne.Contents Set grp = str.Groups("Meldingen") For Each sct In grp.Shortcuts 'Doe iets met elke Shortcut Next sct
7. Attachments opslaan • PST-bestanden groeien héél groot • Eén v/d redenen: bijlagen in PST-bestand • Deel v/d oplossing: • Bijlagen extern opslaan • Verwijderen uit e-mail • Automatiseren!
7. Attachments opslaan • Wanneer: • Automatisch na versturen e-mail met bijlage • Handmatig (knop) bij ontvangen e-mail (zie casus 3) • Proces: • Laat gebruiker bijlagen opslaan • Verwijder alle bijlagen uit de e-mail • Voeg een lijst toe van de verwijderde bijlagen
7. Attachments opslaan • Objecten en technieken • Application en Session • Explorer en Inspector • Folders • Items • Events • Gaten in het objectmodel
Gaten in het objectmodel • Access, Excel, Word: objectmodel vrijwel 1:1 met applicatiefuncties • Outlook: objectmodel heel beperkt • Géén macrorecorder • Vele UI-functies niet beschikbaar als methods of properties • Workaround: knop uitvoeren! • Iets beter dan SendKeys
Gaten in het objectmodel ' Werkbalkknop vinden en uitvoeren Const BIJLAGEN_OPSLAAN_ID = 3167 Dim cbs As CommandBars Dim ctl As CommandBarControl Set cbs = ActiveInspector.CommandBars Set ctl = cbs.FindControl(ID:=BIJLAGEN_OPSLAAN_ID) If Not ctl Is Nothing Then oControl.Execute
1. Basiskennis VBA Outlook • Objecten en technieken • Application en Session • Explorer en Inspector • Folders • Items • Events • Gaten in het objectmodel
5. Standaardafspraken • Regelmatig dezelfde afspraak op verschillende dagen • Bijv Teamoverleg altijd om 10:30 in kamer 4.14, maar steeds op andere dag • Bijv. Etentje altijd om 19:30, maar steeds op andere dag en lokatie • Nieuwe afspraak maken op geselecteerde dag • Standaardwaardes alvast invullen
5. Standaardafspraken • Objecten en technieken • Application en Session • Items
4. Herinnering bijlagen • Bij verzenden e-mail: • Staat er woord in tekst dat op bijlage wijst? • Zo ja, zijn er bijlagen bijgesloten? • Zo nee, vraag dan aan gebruiker of dat klopt • Zo nee, laat gebruiker bijlagen kiezen • Wannéér moet dit gebeuren Event • Wát moet er precies gebeuren
4. Herinnering bijlagen • Objecten en technieken • Application en Session • Explorer en Inspector • Folders • Items • Events • Gaten in het objectmodel
2. Applicatiebalken aanpassen • Objecten en technieken • Application en Session • Explorer en Inspector • CommandBars
9. Contactpersonen via VBA • Contactpersonen en ActiveSync • Synchroniseren tussen Outlook en PDA • ActiveSync verwisselt soms thuis- en werkadres • Outlook zet werkadres standaard in lijstSoms is echter privé-adres gewenst
9. Contactpersonen via VBA • Objecten en technieken • Application en Session • Items
8. Mail autom.sorteren • Ontvangen e-mail automatisch sorteren • Van bepaalde afzenders altijd sorteren • Van andere afzenders nooit sorteren • Sorteren in map met naam afzender • Moet blijven werken, ook als mapindeling wijzigt (maar naam map hetzelfde)
8. Mail autom.sorteren • Proces: nieuwe e-mail komt binnen • Controleer automatisch: • Is afzender uitgesloten van automatisch sorteren? • Heeft afzender al (ergens) een sorteermap? • Vraag gebruiker: sorteren? • Ja maak map op standaardplek • Nee registreer afzender als uitzondering
8. Mail autom.sorteren • Objecten en technieken • Application en Session • Explorer en Inspector • Folders • Items • Events