Events van besturingselementen op een werkblad verwerken middels een klassenmodule.

Pagina's in dit artikel

  1. Voorbereiding
  2. Klassenmodule
  3. Verbinden
  4. Conclusie

De klassenmodule maken

Eerst dient een klassenmodule te worden ingevoegd:

Een klasse-module invoegen
Figuur 2: Menu om een klassenmodule in te voegen

Verander de naam van de klassenmodule in het venster eigenschappen:

De klasse module een naam geven
Figuur 3: Het venster eigenschappen met de nieuwe naam van de klassenmodule

Typ deze regels in het code venster:

Option Explicit

Private WithEvents mobtOption As MSForms.OptionButton

Hierna zal "mobtOption" beschikbaar zijn in de linker keuzelijst bovenaan het codevenster:

De objecten keuzelijst bovenaan het code venster
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:

Private Sub mobtOption_Click()

End Sub

Door nu op de rechter keuzelijst te klikken wordt de lijst met beschikbare events voor dit type besturingselement in de klassenmodule getoond:

De events keuzelijst bovenaan het code venster
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:

De events keuzelijst bovenaan het code venster
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:

Option Explicit

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:

Private Sub mobtOption_Change()
    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.