Inleiding.
Vorige week hebben we een voorbeeld geprobeerd om een basisklasse-object door te geven, via de Set Eigenschap Procedure, om onderdeel te worden van het Object in het geheugen. Het doorgegeven object wordt een extensie of onderliggend object van het hoofdobject in het geheugen. In ons eerdere programma werd het doorgeven van het onderliggende object aan het doelobject gedaan in de instantiërende fase van ons testprogramma. We hebben waarden toegewezen aan de doorgegeven objecteigenschappen in het latere deel van het programma. Het volgende voorbeeld is iets anders.
Voor degenen die de eerdere artikelen over de MS-Access Class-module willen doornemen, staan de links hieronder:
- MS-Access Class-module en VBA
- MS-Access VBA Class Object Arrays
- MS-Access-basisklasse en afgeleide objecten
- VBA-basisklasse en afgeleid object-2
Deze keer zullen we beide Objecten (ClsArea – de basisklasse, ClsVolume2 – de doelklasse) afzonderlijk openen in ons testprogramma. Wijs waarden toe aan de Base Class ClsArea Properties, voordat u ze doorgeeft aan het doelklasse ClsVolume2-object. Onthoud dat de Volume2-klasse slechts één eigen eigenschap heeft, de p_Height Eigenschap en zijn methode Volume() heeft de Lengte . nodig en Breedte Waarden van de basisklasse ClsArea om het volume te berekenen.
- Kopieer en plak de volgende voorbeeldtestcode in een standaardmodule.
De SetNewVol2_2-procedure.
Public Sub SetNewVol2_2() 'Method 2/2 Dim CA As ClsArea Dim Vol As ClsVolume2 Set CA = New ClsArea Set Vol = New ClsVolume2 CA.strDesc = "Bed Room" CA.dblLength = 90 CA.dblWidth = 10 Stop 'Here ClsArea class Object CA is passed to the ‘Property procedure Set CArea of ClsVolume2 object Vol Set Vol.CArea = CA 'Pass ClsArea obj to ClsVolume2 Vol.dblHeight = 10 'assign height to ClsVolume2 Debug.Print "Description", "Length", "Width", "Area", "Height", "Volume" With Vol.CArea Debug.Print .strDesc, .dblLength, .dblWidth, .Area(), Vol.dblHeight, Vol.Volume() End With Stop Set CA = Nothing Set Vol = Nothing End Sub
VBA-codebeoordeling.
In de eerste Dim verklaring, CA is gedefinieerd als ClsArea Object en Vol als ClsVolume2-object. De volgende twee instructies instantiëren beide objecten in het geheugen.
De volgende drie instructies wijzen waarden toe aan de eigenschappen van ClsArea Class Object.
De Stop statement geeft een pauze in de uitvoering van de Code zodat we de Object Property-waarden in het Locals-venster kunnen verifiëren.
De Set Vol.CArea =CA instructie wijst de ClsArea Class Object CA toe als een onderliggend object in de Vol (ClsVolume2) Object.
In de volgende stap dblHeight Eigenschap van ClsVolume2 Class Object is toegewezen met de waarde 10.
De volgende instructies voor de Stop-instructie printen de waarden uit het geheugen naar het Debug-venster.
De volgende twee Set Statements verwijdert de objecten uit het geheugen voordat het programma wordt beëindigd.
Geef het Locals-venster weer.
- Selecteer Locals-venster Optie in het menu Beeld.
- Klik ergens in het midden van de code en druk op F5 om de code uit te voeren totdat het programma pauzeert bij de Stop uitspraak. U kunt ook op F8 . drukken om de code stap voor stap uit te voeren om het Locals-venster bij elke stap op wijzigingen te controleren.
- Klik op de [+] Symbool om uit te vouwen en zowel Objecteigenschappen als waarden weer te geven.
- Controleer de CArea en p_Area Objectverwijzing in de Waarde kolom van de Vol Voorwerp
. De waarde daarin wordt weergegeven als Niets omdat we het CA-object nog niet hebben doorgegeven aan het Vol-object. - Als u klaar bent met het bekijken van de inhoud van het Locals-venster, voert u de code uit tot de volgende Stop uitspraak. Nu, de CArea Verkrijg Property Procedure en p_Area Object wordt toegewezen aan het ClsArea Class Object.
We zullen een ander variantvoorbeeld van beide klassen ClsArea en ClsVolume2 proberen.
Nieuwe klasmodule ClsVolume3.
1. Voeg een nieuwe klassemodule in en wijzig de naam Eigenschapswaarde in ClsVolume3 .
2. Kopieer en plak de volgende VBA-code in de ClsVolume3-klassenmodule:
Option Compare Database Option Explicit 'Method three Private p_Height As Double Public p_Area As ClsArea Public Property Get dblHeight() As Double dblHeight = p_Height End Property Public Property Let dblHeight(ByVal dblNewValue As Double) p_Height = dblNewValue End Property Public Function Volume() As Double Volume = p_Area.dblLength * p_Area.dblWidth * Me.dblHeight End Function Private Sub Class_Initialize() Set p_Area = New ClsArea End Sub Private Sub Class_Terminate() Set p_Area = Nothing End Sub
Controleer de code vanaf het begin:p_Height verklaard als privé-eigendom. De p_Area Eigendom van ClsVolume3-klasse verklaard als Openbaar ClsArea-object. Dat betekent p_Area zal verschijnen als een eigenschap van de ClsVolume3-klasse met zijn eigen weer te geven eigenschappen voor directe Get/Let bewerkingen in het gebruikersprogramma in de standaardmodule. Hoewel ClsArea Class Object is gedeclareerd als openbaar eigendom van ClsVolume3-klasse, zijn de eigenschappen ervan ingekapseld in ClsArea Class zelf.
Controleer de Class_Initialize() en Class_Terminate() Subroutines. Het ClsArea-object wordt geïnstantieerd in de Class_Initialize()-code en verwijdert het object uit het geheugen in de Class_Terminate()-code, wanneer het gebruikersprogramma eindigt.
Het testprogramma.
De voorbeeldtest VBA-code wordt hieronder gegeven.
Kopieer en plak de code in de standaardmodule.
Public Sub SNewVol3() 'Here ClsArea class is declared as a Public Property of ClsVolume3 Dim volm As ClsVolume3 Set volm = New ClsVolume3 volm.p_Area.strDesc = "Bed Room" volm.p_Area.dblLength = 15 'assign length volm.p_Area.dblWidth = 10 'assign width in clsArea volm.dblHeight = 10 'assign height to ClsVolume2 Debug.Print "Description", "Length", "Width", "Area", "Height", "Volume" With volm.p_Area Debug.Print .strDesc, .dblLength, .dblWidth, .Area, volm.dblHeight, volm.Volume End With Set volm = Nothing End Sub
Geef het Locals-venster weer (Bekijken -> Locals-venster), als het nog niet open is.
Klik ergens in het midden van de code en druk op F8 om de VBA-code regel voor regel uit te voeren en het lokale venster te bekijken om bij te houden wat er bij elke stap gebeurt.
Alle bovenstaande varianten van de ClsVolume-klasse zijn geschreven met minder code, behalve het eerste voorbeeld van de ClsVolume-klasse.
Werken met het Recordset-object.
Volgende week gaan we aan de slag met een ingebouwd Object DAO.Recordset en bouw een klasmodule naar:
- Een veld berekenen en bijwerken,
- De gegevens sorteren,
- Druk de gesorteerde gegevens af in het foutopsporingsvenster,
- en maak een kloon van de tabel met gesorteerde gegevens.
Dat is veel actie volgende week.
Lijst met alle links over dit onderwerp.
- MS-Access Class-module en VBA
- MS-Access VBA Class Object Arrays
- MS-Access-basisklasse en afgeleide objecten
- VBA-basisklasse en afgeleide objecten-2
- Basisklasse en afgeleide objectvarianten
- Ms-Access Recordset en Class Module
- Toegang tot klassenmodule en wrapperklassen
- Transformatie van functionaliteit van wrapperklasse
- Basisprincipes voor MS-Access en verzamelingsobjecten
- Ms-Access Class-module en verzamelobject
- Tabelrecords in verzamelobject en formulier
- Basisprincipes van woordenboekobjecten
- Basisprincipes van woordenboekobjecten-2
- Woordenboek-objectsleutels en items sorteren
- Records van woordenboek naar formulier weergeven
- Klasobjecten toevoegen als woordenboekitems
- Klasobject woordenboekitem op formulier bijwerken