Pagina's in dit artikel
-
Voorbereiding
-
Klassenmodule
-
Verbinden
-
Conclusie
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):
Public
Property Set Control(obtNew
As MSForms.OptionButton)
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:
Dim mcolEvents
As Collection
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:
Option
Explicit
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):
Option
Explicit
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):
Private Sub
Class_Terminate()
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)
Sub TerminateEvents()
'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::
Private Sub
Workbook_BeforeClose(Cancel As
Boolean)
TerminateEvents
End
Sub