Introduktion.
I sidste uge har vi prøvet et eksempel på at sende et basisklasseobjekt gennem sættet Egenskabsprocedure, for at blive en del af objektet i hukommelsen. Det beståede objekt bliver en udvidelse eller et underordnet objekt af hovedobjektet i hukommelsen. I vores tidligere program blev overførsel af det underordnede objekt til målobjektet udført i instansieringsfasen af vores testprogram. Vi har tildelt værdier til de beståede objektegenskaber i den senere del af programmet. Det næste eksempel er lidt anderledes.
For dem, der gerne vil gennemgå de tidligere artikler om MS-Access Class Module, er linkene nedenfor:
- MS-Access Class Module og VBA
- MS-Access VBA Class Object Arrays
- MS-Access Basisklasse og afledte objekter
- VBA-basisklasse og afledt objekt-2
Denne gang åbner vi begge objekter (ClsArea – basisklassen, ClsVolume2 – målklassen) separat i vores testprogram. Tildel værdier til Base Class ClsArea-egenskaberne, før de overføres til målklasse ClsVolume2-objektet. Husk, at Volume2-klassen kun har én egen egenskab, p_Height Ejendom og dens metode Volume() har brug for længden og Bredde Værdier for basisklassen ClsArea til beregning af volumen.
- Kopiér og indsæt følgende prøveprøvekode i et standardmodul.
SetNewVol2_2-proceduren.
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-kodegennemgang.
I den første Dim erklæring, CA er defineret som ClsArea Object og Vol som ClsVolume2-objekt. De næste to udsagn instansierer begge objekter i hukommelsen.
De næste tre sætninger tildeler værdier til egenskaberne for ClsArea Class Object.
Stop sætningen giver en pause i kodeudførelsen, så vi kan verificere objektegenskabsværdierne i Locals-vinduet.
Set Vol.CArea =CA sætningen tildeler ClsArea Class Object CA, som et underordnet objekt til Vol (ClsVolume2) Objekt.
I det næste trin dblHeight Egenskaben for ClsVolume2 Class Object er tildelt værdien 10.
De næste sætninger før Stop-sætningen udskriver værdierne fra hukommelsen til fejlfindingsvinduet.
De næste to Sæt Statements fjerner objekterne fra hukommelsen, før programmet afsluttes.
Vis Locals-vinduet.
- Vælg Locals Window Indstilling fra menuen Vis.
- Klik et sted i midten af koden, og tryk på F5 for at køre koden, indtil programmet stopper ved Stop udmelding. Alternativt kan du trykke på F8 at køre koden et trin ad gangen for at inspicere Locals-vinduet for ændringer, ved hvert trin.
- Klik på [+] Symbol for at udvide og vise både objektegenskaber og værdier.
- Tjek Carea og p_Area Objektreference i Værdi kolonne i Vol Objekt. Værdien derinde vises som Intet fordi vi endnu ikke har videregivet CA Object til Vol Object.
- Hvis du er færdig med at se indholdet i Locals Window, så kør koden til næste stop udmelding. Nu, Carea Få ejendomsprocedure og p_Area Objekter tildeles med ClsArea-klasseobjektet.
Vi vil prøve et andet varianteksempel af begge disse to klasser ClsArea og ClsVolume2.
Nyt klassemodul ClsVolume3.
1. Indsæt et nyt klassemodul, og skift dets navn Egenskabsværdi til ClsVolume3 .
2. Kopiér og indsæt følgende VBA-kode i ClsVolume3 Class Module:
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
Tjek koden fra begyndelsen:p_Height erklæret som privat ejendom. p_Area Ejendom for ClsVolume3 Class erklæret som Offentlig ClsArea-objekt. Det betyder p_Area vises som en egenskab for ClsVolume3-klassen med sine egne egenskaber, der kan vises til direkte Get/Let operationer i brugerprogrammet i standardmodulet. Selvom ClsArea Class Object er blevet erklæret som offentlig ejendom af ClsVolume3 Class, er dets egenskaber indkapslet i selve ClsArea Class.
Tjek Class_Initialize() og Class_Terminate() Underrutiner. ClsArea-objektet instansieres i Class_Initialize()-koden og fjerner objektet fra hukommelsen i Class_Terminate()-koden, når brugerprogrammet slutter.
Testprogrammet.
Eksempel på Test VBA-koden er givet nedenfor.
Kopiér og indsæt koden i standardmodulet.
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
Vis Locals-vinduet (View - -> Locals-vinduet), hvis det ikke allerede er åbent.
Klik et sted i midten af koden, og tryk på F8 for at udføre VBA-koden en linje ad gangen og se det lokale vindue for at spore, hvad der sker ved hvert trin.
Alle ovennævnte varianter af ClsVolume Class er blevet skrevet med mindre kode, undtagen det første eksempel på ClsVolume Class.
Arbejde med Recordset-objektet.
I næste uge vil vi arbejde med et indbygget Object DAO.Recordset og byg et klassemodul til:
- Beregn og opdater et felt,
- Sortér dataene,
- Udskriv de sorterede data i fejlfindingsvinduet,
- og opret en klon af tabellen med sorterede data.
Det er en masse action i næste uge.
Liste over alle links om dette emne.
- MS-Access Class Module og VBA
- MS-Access VBA Class Object Arrays
- MS-Access Basisklasse og afledte objekter
- VBA-basisklasse og afledte objekter-2
- Basisklasse og afledte objektvarianter
- Ms-Access Recordset og klassemodul
- Adgang til klassemodul- og indpakningsklasser
- Wrapper Class Funktionalitet Transformation
- Grundlæggende om Ms-Access og Collection Object
- Ms-Access klassemodul og samlingsobjekt
- Tabelposter i samlingsobjekt og -form
- Grundlæggende om ordbogsobjekt
- Dictionary Object Basics-2
- Sortering af ordbogsobjektnøgler og -elementer
- Vis poster fra ordbog til formular
- Tilføj klasseobjekter som ordbogselementer
- Opdater Class Object Dictionary Element på formular