Events van besturingselementen op een werkblad verwerken middels een klassenmodule.
Pagina's in dit artikel
De elementen aan de klassenmodule knopen
Nu de event sub klaar is, is het tijd om de elementen op het werkblad aan de klassenmodule te verbinden.
Allereerst moeten wat code in de klassenmodule worden geplaatst die het object (lees het element) zal ontvangen waarnaar de klassenmodule gaat "luisteren" (dit zal worden gedaan door een initialisatie routine die verderop wordt getoond):
Set mobtOption = obtNew
End Property
Nu moeten er zoveel instanties van de
klassenmodule worden gemaakt als er elementen zijn en elk element moet
worden opgehangen aan zijn of haar eigen instantie van de klassenmodule.
Voeg een normale module toe aan het project.
Er zal een Collection variabele worden gebruikt om de instanties van de
klassenmodule in op te slaan:
Vervolgens moeten alle OLEObjects doorlopen worden en worden de Optionbutton elementen met hun instantie van de klassenmodule verbonden. Hier is de code van de hele module:
Dim mcolEvents As Collection
Sub InitializeEvents()
Dim obtOptionbutton As OLEObject
Dim osh As Worksheet
Dim clsEvents As clsObtHandler
Set osh = ThisWorkbook.Worksheets(1)
If mcolEvents Is Nothing Then
Set mcolEvents = New Collection
End If
'Loop door alle controls
For Each obtOptionbutton In osh.OLEObjects
If TypeName(obtOptionbutton.Object) = "OptionButton" Then
'Maak een nieuwe instantie van de event handler klasse
Set clsEvents = New clsObtHandler
'Laat de events van de text box verwerken
Set clsEvents.Control = obtOptionbutton.Object
'Voeg de event handler instantie toe aan de collectie,
'zodat deze gedurende de levensduur van ons bestand actief blijft
mcolEvents.Add clsEvents
End If
Next
End Sub
Sub TerminateEvents()
'Here the collection of classes is destroyed so memory will be freed up:
Set mcolEvents = Nothing
End Sub
De laatste stap is ervoor zorgen dat de initialisatie routine wordt uitgevoerd wanneer het bestand wordt geopend, bijvoorbeeld door middel van het Workbook_Open event (in de ThisWorkbook module):
Private Sub Workbook_Open()
InitializeEvents
End Sub
Afsluiten en opruimen
Als het bestand wordt gesloten, of wanneer de controls niet meer op events moeten reageren, dan moet de klasse haar objecten opruimen bij beëindigen (in de klasse module):
Set mobtOption = Nothing
End Sub
Deze code zorgt ervoor dat het geheugen dat werd ingenomen door de collectie van klasses, weer wordt vrijgemaakt:
(in een normale module)
'Hier wordt de collectie van event klassen vernietigd
'zodat het geheugen wordt vrijgegeven:
Set mcolEvents = Nothing
End Sub
Wanneer door bovenstaande subroutine gestapt wordt, dan zal de Class_Terminate routine worden uitgevoerd voor elke lid van de collectie (zoals opgebouwd in de routine "InitialiseEvents"), waarmee alle object variabelen dus automatisch verwijderd worden uit het geheugen. Uiteraard moet deze routine worden aangeroepen wanneer het bestand gesloten wordt, dus moet de volgende code in de ThisWorkbook module worden geplaatst::
TerminateEvents
End Sub