Beste leden,
Ik wil graag in outlook mijn automatisch antwoord laten instellen via VBA als er de volgende werkdag een afspraak met "verlof" in mijn agenda staat.
Ik heb al heel wat code maar ik krijg toch nog een "fout 438 tijdens uitvoering: De eigenschap of methode wordt niet ondersteund door dit object" voor het gedeelte waarbij ik de instellingen naar outlook wil brengen. (deze lijn: Outlook.Application.session.OutOfOfficeSettings.startTime = dtHuidigeWerkdag + TimeSerial(18, 0, 0))
Kan iemand hierbij helpen? Ik gebruik Office 365 met Microsoft exchange.
Alvast heel sterk bedankt!
Ik wil graag in outlook mijn automatisch antwoord laten instellen via VBA als er de volgende werkdag een afspraak met "verlof" in mijn agenda staat.
Ik heb al heel wat code maar ik krijg toch nog een "fout 438 tijdens uitvoering: De eigenschap of methode wordt niet ondersteund door dit object" voor het gedeelte waarbij ik de instellingen naar outlook wil brengen. (deze lijn: Outlook.Application.session.OutOfOfficeSettings.startTime = dtHuidigeWerkdag + TimeSerial(18, 0, 0))
Kan iemand hierbij helpen? Ik gebruik Office 365 met Microsoft exchange.
Alvast heel sterk bedankt!
Code:
Private Sub Application_Startup()
Set mijnKalender = Outlook.Application.session.GetDefaultFolder(olFolderCalendar)
CheckNextWorkdayAppointment
End Sub
Private Sub CheckNextWorkdayAppointment()
' Declaratie van variabelen
Dim afspraak As Outlook.AppointmentItem
Dim onderwerpIntern As String
Dim onderwerpExtern As String
Dim inhoudBinnen As String
Dim inhoudBuiten As String
Dim dtVerlofStart As Date
Dim dtVerlofEinde As Date
Dim dtHuidigeWerkdag As Date
Dim dtVolgendeWerkdag As Date
' Het bepalen van de huidige en volgende werkdag
dtHuidigeWerkdag = GetHuidigeWerkdag(Date)
dtVolgendeWerkdag = GetVolgendeWerkdag(dtHuidigeWerkdag)
' Itereren over de afspraken in de agenda
For Each afspraak In mijnKalender.Items
If afspraak.Start >= dtVolgendeWerkdag And afspraak.Start < dtVolgendeWerkdag + 1 Then
' Controleren of de afspraak op de volgende werkdag valt
If InStr(1, LCase(afspraak.Subject), "verlof") > 0 Or InStr(1, LCase(afspraak.Location), "verlof") > 0 Then
' Controleren of de afspraak een "verlof" aanduiding heeft in het onderwerp of de locatie
' Controleren of de volgende werkdag na het verlof is bepaald
If dtVolgendeWerkdag <> DateSerial(1900, 1, 1) Then
' Het maken van automatische antwoordteksten voor interne en externe personen
onderwerpIntern = "Automatisch Antwoord: Afwezig"
inhoudBinnen = "hier komt de tekst voor internen"
onderwerpExtern = "Automatisch Antwoord: Afwezig"
inhoudBuiten = "hier komt de tekst voor externen"
' Het automatische antwoord instellen vanaf de huidige werkdag om 18:00 uur tot de dag na de verlofafspraak om 8:00 uur
Outlook.Application.session.OutOfOfficeSettings.startTime = dtHuidigeWerkdag + TimeSerial(18, 0, 0)
Outlook.Application.session.OutOfOfficeSettings.endTime = dtVolgendeWerkdagNaVerlof + TimeSerial(8, 0, 0)
Outlook.Application.session.OutOfOfficeSettings.InternalReply.Subject = onderwerpIntern
Outlook.Application.session.OutOfOfficeSettings.InternalReply.Body = inhoudBinnen
Outlook.Application.session.OutOfOfficeSettings.ExternalReply.Subject = onderwerpExtern
Outlook.Application.session.OutOfOfficeSettings.ExternalReply.Body = inhoudBuiten
Outlook.Application.session.OutOfOfficeSettings.Enabled = True
Exit For ' Stoppen met de iteratie
End If
End If
End If
Next afspraak
End Sub
Private Function GetHuidigeWerkdag(ByVal dtDatum As Date) As Date
' Het aantal dagen tellen totdat een werkdag wordt bereikt (zaterdag en zondag overslaan)
Dim intDag As Integer
intDag = Weekday(dtDatum)
Do Until intDag <> vbSaturday And intDag <> vbSunday
dtDatum = dtDatum - 1
intDag = Weekday(dtDatum)
Loop
GetHuidigeWerkdag = dtDatum
End Function
Function GetVolgendeWerkdag(dtHuidigeWerkdag As Date) As Date
' Bepalen van de volgende werkdag op basis van de huidige werkdag
Dim dtVolgendeDag As Date
dtVolgendeDag = dtHuidigeWerkdag + 1 ' Ga naar de volgende dag
' Controleren of de volgende dag een weekenddag is (zaterdag of zondag)
Do While Weekday(dtVolgendeDag, vbMonday) > 5
dtVolgendeDag = dtVolgendeDag + 1 ' Ga naar de volgende dag
Loop
GetVolgendeWerkdag = dtVolgendeDag
End Function