Op formulieren in Excel en Word zijn standaard Selectievakjes (Checkbox), Keuzerondjes (Option button) of Wisselknoppen (Toggle button) beschikbaar om gebruikersvriendelijk eenvoudige keuzes te kunnen vastleggen (bijv. in- of uitgeschakeld). Het nadeel van Checkboxen en Keuzerondjes is dat ze niet groter of kleiner te maken zijn. Daardoor laat de leesbaarheid soms te wensen over. Een alternatief is om hiervoor een Switcher te gebruiken:
Voordeel van deze Switcher is dat de grootte eenvoudig aanpast kan worden en dat ook door middel van een kleur zichtbaar is welke keuze gemaakt is. Omdat op het formulier ook te zien is dat de switcher van links naar rechts beweegt of andersom, geeft dat een prettige gebruikservaring. De formulieren worden daardoor dynamischer. De Switcher is echter geen standaard formulierbesturingselement dat toegevoegd kan worden.
Een Switcher besturingselement kan echter wel redelijk eenvoudig gemaakt worden. Dit kan gedaan worden met behulp van een Groepsvak en Label besturingselement. Voeg daarvoor eerst een nieuw Groepsvak toe aan een formulier en geef deze een donkergrijze achtergrondkleur (bijv. &H00C0C0C0&) en verwijder de Caption. Geef dit Groepsvak de naam frSwitcher1. Stel de breedte van dit groepsvak in op 66 en de hoogte op 33.
Plaats vervolgens in het Groepsvak een Bijschrijft en geef die bijschrift een witte achtergrondkleur. Zorg ervoor dat het bijschrift geen tekst bevat. Geef het Bijschrijft de naam lblSwitcher1. Zet bij Left en Top de waarde 4 en stel de breedte en hoogte in op 22.
Op dezelfde manier kunnen desgewenst meerdere switchers toegevoegd worden, waarbij telkens de het laatste nummer van de benaming opgehoogd moet worden (frSwitcher2 en lblSwitcher2, enz.).
Voeg daarna de volgende code toe aan het formulier. Deze code gaat uit van de aanwezigheid van 2 switchers op het formulier.
'------------------------------------------------------------------------------------------------------------------------------
' Auteur : Manfred van den Noort
' Copyright : © 2022-2024 worksheetsvba.com, alle rechten voorbehouden
' Datum : 2022-12-16
' Versie : 1.0
' Doel : Switcher besturingselement
'------------------------------------------------------------------------------------------------------------------------------
Private Sub frSwitcher1_Click()
MoveSwitcher 1
End Sub
Private Sub lblSwitcher1_Click()
MoveSwitcher 1
End Sub
Private Sub frSwitcher2_Click()
MoveSwitcher 2
End Sub
Private Sub lblSwitcher2_Click()
MoveSwitcher 2
End Sub
Private Sub MoveSwitcher(iSeqNo As Integer)
Dim i As Integer, sngTimer As Single, iLeftStep As Integer, frSwitcher As MSForms.Frame, lblSwitcher As MSForms.Label
Set frSwitcher = Controls("frSwitcher" & iSeqNo)
Set lblSwitcher = Controls("lblSwitcher" & iSeqNo)
If frSwitcher.Tag = False Then
iLeftStep = 1
Else
iLeftStep = -1
End If
For i = 1 To 32
sngTimer = Timer
Do While Timer - sngTimer < 0.005
Loop
lblSwitcher.Left = lblSwitcher.Left + iLeftStep
Repaint
Next
With frSwitcher
.Tag = Not CBool(.Tag)
If .Tag = False Then
.BackColor = &HC0C0C0
Else
.BackColor = &HF0B000
End If
End With
End Sub
Onderstaand is een voorbeeldbestand te downloaden waarin dit voorbeeld van een Switcher te zien is. Aan de voorbeeldbestand is ook een geavanceerde versie van de Switcher toegevoegd. Met deze versie kun je Switchers toevoegen waarbij je zelf de grootte kunt bepalen. Deze afmeting wordt bepaald door het afmeting van het Groepsvak dat op een formulier geplaatst wordt. Van dit groepsvak wordt vervolgens een Switcher-object gemaakt met behulp van een klasse, waarna deze klasse de switcher verder instelt en de gebeurtenissen afhandelt. Dit object bevat voor nu nog alleen nog maar een Value property en een Change event, maar dan kan indien gewenst eenvoudig uitgebreid worden.
Vragen / suggesties
Hopelijk heeft dit artikel geholpen bij het maken van een Switcher besturingslement op een VBA formulier. Als er verdere vragen over dit onderwerp zijn of suggesties voor verbetering, plaats dan een reactie hieronder.