Events van besturingselementen op een werkblad verwerken middels een klassenmodule.
Pagina's in dit artikel
De klassenmodule maken
Eerst dient een klassenmodule te worden ingevoegd:

Figuur 2: Menu om een klassenmodule in te voegen
Verander de naam van de klassenmodule in het venster eigenschappen:

Figuur 3: Het venster eigenschappen met de nieuwe naam van de
klassenmodule
Typ deze regels in het code venster:
Private WithEvents mobtOption As MSForms.OptionButton
Hierna zal "mobtOption" beschikbaar zijn in de linker keuzelijst bovenaan het codevenster:

Figuur 4: Keuzelijst bevat nieuw element voor de klassenmodule
Wanneer deze wordt geselecteerd, dan zal de code voor het het standaard klik event in de module worden geplaatst:
End Sub
Door nu op de rechter keuzelijst te klikken wordt de lijst met beschikbare events voor dit type besturingselement in de klassenmodule getoond:

Figuur 5: Events beschikbaar voor een keuzerondje bij gebruik van een
klassenmodule
Merk op, dat het aantal beschikbare events minder is dan wanneer gebruik wordt gemaakt van de codemodule achter het werkblad:

Figuur 6: Events voor elementen beschikbaar via de codemodule achter het
werkblad
Om precies te zijn ontbreekt in dit geval het LostFocus event. Bij andere elementen kunnen meer (en andere) events ontbreken.
Selecteer het Change event in de keuzelijst en verwijder het klik event. Er zou nu zoiets als dit moeten staan:
Private WithEvents mobtOption As MSForms.OptionButton
Private Sub mobtOption_Change()
End Sub
Zoals eerder gezegd, het is de bedoeling dat de kleur van het geselecteerde element verandert en natuurlijk ook die van het ge-deselecteerde element. Ook was het de bedoeling een berichtje te krijgen over welk element geselecteerd is. Hiertoe is de volgende programmacode geschreven:
If mobtOption.Value = 0 Then
mobtOption.Object.BackColor = RGB(0, 255, 0)
Else
MsgBox "You have selected " & mobtOption.Caption & " from " & mobtOption.GroupName
mobtOption.Object.BackColor = RGB(255, 0, 0)
End If
End Sub
Wanneer nu op een keuzerondje wordt geklikt om het te selecteren, dan wordt zowel het change event getriggert van het rondje dat is aangeklikt, als het change event van het keuzerondje dat geselecteerd was. Het change event wordt dus tweemaal uitgevoerd, éénmaal voor het geselecteerde rondje en éénmaal voor het ge-deselecteerde rondje. Het eerste zal dus een waarde van 1 kennen en het tweede een waarde 0.
Veelgestelde vragen
Hoe voeg je een klassenmodule toe aan een werkblad?
Hoe verander je de naam van een klassenmodule in het eigenschappenvenster?
Welke code moet je typen om een optieknop met events te maken in een klassenmodule?
Waarom ontbreekt het LostFocus event in de klassenmodule?
Hoe ziet de code eruit voor het Change event van een optieknop in een klassenmodule?
Hoe kun je de kleur van een geselecteerd en gedeselecteerd element veranderen met VBA?
Hoe krijg je een bericht te zien over welk element geselecteerd is in een klassenmodule?
Waarom wordt het Change event tweemaal uitgevoerd bij het selecteren van een keuzerondje?
Wat is de waarde van het Change event voor het geselecteerde en gedeselecteerde keuzerondje?


