Outlook VBA agenda

In dit artikel komt aan de orde hoe afspraken m.b.v. VBA gemaakt en weer verwijderd kunnen worden in een Outlook agenda. De handelingen vinden plaats in een specifieke agenda en de afspraken kenmerken zich met een specifieke categorie. Op deze manier kan de agenda voor één specifiek doel worden ingezet en blijven de - handmatig aangemaakte - afspraken onaangetast.

Om dit alles mogelijk te maken is de onderstaande klassenmodule - gebaseerd op een vroege binding - ontwikkeld met twee procedures, te weten: maakAfspraken en verwijderAfspraken. Door eerst de procedure verwijderAfspraken uit te voeren en daarna de procedure maakAfspraken kan deze klassenmodule worden ingezet voor bijvoorbeeld het uploaden van afspraken uit Excel naar een agenda van Outlook.

Deze techniek is vele malen efficiënter dan een routine te ontwikkelen die afspraken synchroniseert.

Class_Initialize

Hier worden alle objecten geladen en de betreffende agenda geselecteerd m.b.v. de opgegeven naam. Om i.p.v. een specifieke agenda te gebruiken kan ook de standaard agenda worden gebruikt:

1Set objAgenda = objNameSpace.GetDefaultFolder(olFolderCalendar)

maakAfspraken

In deze procedure worden drie afspraken toegevoegd met een interval van 1 week, beginnend vanaf vandaag. Elke afspraak krijgt de opgegeven categorie.

verwijderAfspraken

In deze procedure worden alle afspraken weer verwijderd met de opgegeven categorie. Gezien tijdens het verwijderen telkens het totale aantal te verwijderen afspraken wijzigt, wordt er van achter naar voor gewerkt. Dit is iets wat met een for-each loop niet kan worden bewerkstelligd.

Class_Terminate

Tot slot worden alle geladen objecten weer uit het geheugen gehaald.

01Option Explicit
02 
03Dim objOutlook As Outlook.Application
04Dim objNameSpace As Outlook.Namespace
05Dim objAgenda As Outlook.MAPIFolder
06Dim objAfspraak As Outlook.AppointmentItem
07 
08Const strAgenda = "NaamAgenda"
09Const strCategorie = "NaamCategorie"
10 
11Private Sub Class_Initialize()
12 
13    Set objOutlook = Outlook.Application
14    Set objNameSpace = objOutlook.GetNamespace("MAPI")
15    Set objAgenda = objNameSpace.GetDefaultFolder(olFolderCalendar).Folders(strAgenda)
16 
17End Sub
18 
19Sub maakAfspraken()
20 
21    Dim i As Integer
22    Dim d As Date
23     
24    d = Date
25     
26    For i = 1 To 3
27     
28        Set objAfspraak = objAgenda.Items.Add
29         
30        With objAfspraak
31            .Start = d
32            .AllDayEvent = True
33            .Subject = "Afspraak " & i
34            .Body = "Body"
35            .Categories = strCategorie
36            .Save
37        End With
38     
39        Set objAfspraak = Nothing
40         
41        d = DateAdd("ww", 1, d)
42     
43    Next i
44 
45End Sub
46 
47Sub verwijderAfspraken()
48 
49    Dim i As Integer
50 
51    For i = objAgenda.Items.Count To 1 Step -1
52        Set objAfspraak = objAgenda.Items(i)
53        If objAfspraak.Categories = strCategorie Then objAfspraak.Delete
54    Next i
55 
56End Sub
57 
58Private Sub Class_Terminate()
59 
60    Set objOutlook = Nothing
61    Set objNameSpace = Nothing
62    Set objAgenda = Nothing
63 
64End Sub

Terugkerende afspraak

De onderstaande procedure maakt een afspraak aan met de huidige datum en tijd. Voorts is er sprake van een terugkerende afspraak om de 3 weken. Deze afspraak duurt 30 minuten en kent geen einddatum.

Deze procedure staat los van de bovenstaande klassenmodule en maakt gebruik van de standaard agenda.

01Option Explicit
02 
03Sub maakTerugkerendeAfspraak()
04     
05    Dim objOutlook As Outlook.Application
06    Dim objAfspraak As Outlook.AppointmentItem
07    Dim objNameSpace As Outlook.Namespace
08    Dim objTerugkerendPatroon As Outlook.RecurrencePattern
09    Dim objAgenda As Outlook.MAPIFolder
10 
11    Set objOutlook = Outlook.Application
12    Set objNameSpace = objOutlook.GetNamespace("MAPI")
13    Set objAgenda = objNameSpace.GetDefaultFolder(olFolderCalendar)
14    Set objAfspraak = objAgenda.Items.Add
15    Set objTerugkerendPatroon = objAfspraak.GetRecurrencePattern
16  
17    With objAfspraak
18        .Subject = "Onderwerp"
19        .Body = "Body"
20        .Location = "Locatie"
21        .Categories = "Categorie"
22    End With
23 
24    With objTerugkerendPatroon
25 
26        .RecurrenceType = olRecursWeekly
27        .Interval = 3
28        .PatternStartDate = Date
29        .StartTime = Time
30        .Duration = 30
31        .NoEndDate = True
32         
33        Select Case Weekday(Date, vbMonday)
34            Case Is = 1 'maandag
35                .DayOfWeekMask = 2
36            Case Is = 2 'dinsdag
37                .DayOfWeekMask = 4
38            Case Is = 3 'woensdag
39                .DayOfWeekMask = 8
40            Case Is = 4 'donderdag
41                .DayOfWeekMask = 16
42            Case Is = 5 'vrijdag
43                .DayOfWeekMask = 32
44            Case Is = 6 'zaterdag
45                .DayOfWeekMask = 64
46            Case Is = 7 'zondag
47                .DayOfWeekMask = 1
48        End Select
49 
50    End With
51 
52    objAfspraak.Save
53     
54    Set objTerugkerendPatroon = Nothing
55    Set objAfspraak = Nothing
56    Set objNameSpace = Nothing
57    Set objAgenda = Nothing
58    Set objOutlook = Nothing
59     
60End Sub