Vaak moet in een applicatie een datum gekozen worden en dan is het heel fraai om hierbij een kalender te tonen die als datumkiezer kan worden gebruikt. Aan de onderzijde van deze pagina kan een Excel-bestand gedownload worden die een hele gebruikersvriendelijke datumkiezer bevat die eenvoudig toegevoegd kan worden aan eigen applicaties. Het bestand bevat 3 klassenmodules: clDatePickerControl, clDatePickerForm en iDatePickerForm die feitenlijk het hart van de tool vormen. Daarnaast bevat dit bestand een formulier frmDatePicker dat verder helemaal leeg is en waarbij ook de afmetingen niet van belang zijn. Het vullen van het formulier en het instellen van de afmetingen wordt verder helemaal geregeld door de klassenmodules. Om deze datumkiezer goed te laten werken moet de volgende code toegevoegd worden aan het formulier:
'------------------------------------------------------------------------------------------------------------------------------
' Auteur : Manfred van den Noort
' Copyright : © 2024-2025 worksheetsvba.com, alle rechten voorbehouden
' Datum : 2025-01-10
' Versie : 1.4
' Doel : DatumKiezer
'------------------------------------------------------------------------------------------------------------------------------
Option Explicit
Private oDatePickerForm As iDatePickerForm, oTargetObject As Object, dSelectedDate As Date
Public Property Let SelectedDate(dVal As Date)
dSelectedDate = dVal
End Property
Public Property Get SelectedDate() As Date
SelectedDate = dSelectedDate
End Property
Public Property Set TargetObject(oObj As Object)
Set oTargetObject = oObj
End Property
Private Sub UserForm_Activate()
Set oDatePickerForm = New clDatePickerForm
With oDatePickerForm
Set .DatePickerForm = Me
Set .TargetObject = oTargetObject
.ShowWeekNumbers = True
.ShowColumnTitles = True
.FirstDayOfWeek = vbMonday
.DatePickerTitle = "DatumKiezer"
.DrawDatePicker
End With
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
oDatePickerForm.TerminateCalendar
Set oDatePickerForm = Nothing
Set oTargetObject = Nothing
End Sub
Daarna kan de datumkiezer als volgt aangeroepen worden:
Private Sub btnFillLabelWithDate_Click()
Load frmDatePicker
Set frmDatePicker.TargetObject = LblDate
frmDatePicker.Show
End Sub
Voor het TargetObject kan op dit moment gekozen worden voor een Range, een TextBox of Label. Na het kiezen van een datum wordt deze vervolgens automatisch in het TargetObject gezet.
Het is ook mogelijk om de geselecteerde datum aan een variabele toe te kennen. Dat kan met de volgende aanroep:
Private Sub btnFillVBAVariableWithDate_Click()
Dim sSelectedDate As Date
Load frmDatePicker
frmDatePicker.Show
sSelectedDate = frmDatePicker.SelectedDate
If sSelectedDate <> 0 Then
Unload frmDatePicker
End If
End Sub
Instel mogelijkheden
De DatumKiezer bevat diverse mogelijkheden om deze naar eigen wens in te richten. Hiervoor zijn diverse 'properties' beschikbaar die toegevoegd kunnen worden aan de code van UserForm_Activate. Het is daarbij van belang dat dit dan wordt toegevoegd direct voor de coderegel met .DrawDatePiacker. In het demo-bestand dat gedownload kan worden is te zien hoe deze opties gebruikt kunnen worden. De Datum Kiezer bevat momenteel de volgende instelmogelijkheden:
FirstDayOfWeek
Elke dag in de week kan gekozen worden die als eerste getoond wordt op de Datum Kiezer. Als dit niet ingesteld is, dan wordt de eerste dag volgens van de systeeminstellingen gebruikt.
UseISOWeekNumbers
In deze instelling kan aangegeven of voor de weeknummers het ISO weeknummer moet worden gebruikt of dat het Amerikaanse weeknummer moet worden gebruikt. Standaard wordt het ISO weeknummer gebruikt.
ShowWeekNumbers
Met deze instelling kan aangegeven worden of weeknummers op de kalender weergegeven moeten worden. Standaard staat deze optie uit. Als ShowWeekNumbers=True dan zijn er nog aanvullende voorwaarden om het weeknummer te laten zien. Als UseISOWeekNumbers True is, dan moet FirstDayOfWeek maandag zijn en als UseISOWeekNumbers False is dan moet FirstDayOfWeek zondag zijn. Bij alle andere combinaties van UseISOWeekNumbers en FirstDayOfWeek heeft ShowWeekNumbers geen effect.
ShowColumnTitles
Hiermee kunnen dagaanduidingen boven de kolommen zichtbaar of onzichtbaar gemaakt worden. Standaard zijn kolom titels onzichtbaar.
DatePickerTitle
De titel die op het formulier van de Datum Kiezer getoond moet worden kan ingesteld worden met DatePickerTitle. Standaard is dat DatePicker.
DateFormatString
Met DateFormatString kan ingesteld worden hoe de tekstwaarde van de gekozen waarde weergegeven moet worden in een Label of TextBox. Dit moet een geldige formatstring zijn (bijv. "dd-mm-yyyy"). Standaard is deze string leeg en dan wordt gekozen datum als Date weggeschreven.
Toetsenbordbediening
De Datum Kiezer kan volledig met het toetsenbord bediend worden. De volgende toetsen kunnen daarbij gebruikt worden:
Tab en pijl rechts en links
Met de Tab en linker en rechter pijltjes toetsen kan van naar rechts of naar links genavigeerd worden over alle elementen van de datum kiezer.
PageUp en PageDown
Met PageUp en PageDown kan naar de volgende of vorige maand genavigeerd worden.
Spatiebalk en Enter
Met de spatiebalk of Enter-toets kan de actieve datum geselecteerd worden, waarna het formulier gesloten wordt. Dit is vergelijkbaar met een klik met de muis op een datum. Als de knoppen voor de vorige- of volgende maand de focus hebben kan met de spatiebalk of Enter-toets naar deze maand worden genavigeerd.
Esc
Met de Escape toets kan de Datum Kiezer afgesloten worden zonder een datum te selecteren.
Demo bestand
Hieronder kan een volledig werkende demo versie van de Datum Kiezer gedownload worden.
Er staan nog meer updates van deze Datum Kiezer op de planning waarbij de gebruikersvriendelijkheid en mogelijkheden van de tool nog verder verbeterd worden, dus check deze pagina met enige regelmaat om te zien of er een nieuwe versie beschikbaar is.
Vragen / suggesties
Hopelijk heeft dit artikel geholpen bij het gebruiken van deze Datum Kiezer. Als er verdere vragen over dit onderwerp zijn of suggesties voor verbetering, plaats dan een reactie hieronder.