Introduktion.
Förra veckan har vi provat ett exempel för att skicka ett basklassobjekt genom uppsättningen Egenskapsprocedur, för att bli en del av objektet i minnet. Det skickade objektet blir ett tillägg eller underordnat objekt till huvudobjektet i minnet. I vårt tidigare program gjordes överföringen av det underordnade objektet till målobjektet i instansieringsfasen av vårt testprogram. Vi har tilldelat värden till de godkända objektegenskaperna i den senare delen av programmet. Nästa exempel är något annorlunda.
För dem som vill gå igenom de tidigare artiklarna om MS-Access Class Module finns länkarna nedan:
- MS-Access Class Module och VBA
- MS-Access VBA Class Object Arrays
- MS-Access basklass och härledda objekt
- VBA Base Class and Derived Object-2
Den här gången kommer vi att öppna båda objekten (ClsArea – basklassen, ClsVolume2 – målklassen) separat i vårt testprogram. Tilldela värden till Base Class ClsArea-egenskaperna innan du skickar dem till målklass ClsVolume2-objektet. Kom ihåg att klassen Volume2 bara har en egen egenskap, p_Height Egenskap och dess metod Volume() behöver Längden och Bredd Värden för basklassen ClsArea för att beräkna volym.
- Kopiera och klistra in följande provtestkod i en 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-kodgranskning.
I den första Dim uttalande, CA definieras som ClsArea Object och Vol som ClsVolume2 Object. De följande två satserna instansierar båda objekten i minnet.
De följande tre satserna tilldelar värden till egenskaperna för ClsArea Class Object.
Stopp -satsen ger en paus i kodexekveringen så att vi kan verifiera objektegenskapsvärdena i Locals-fönstret.
Set Vol.CArea =CA satsen tilldelar ClsArea Class Object CA, som ett underordnat objekt till Vol (ClsVolume2) Objekt.
I nästa steg dblHeight Egenskapen för ClsVolume2 Class Object tilldelas värdet 10.
Nästa satser före Stop-satsen skriver ut värdena från minnet till felsökningsfönstret.
De nästa två Set Statements tar bort objekten från minnet innan programmet avslutas.
Visa lokalbefolkningsfönstret.
- Välj Lokalfönster Alternativ från menyn Visa.
- Klicka någonstans i mitten av koden och tryck på F5 för att köra koden tills programmet pausar vid Stopp påstående. Alternativt kan du trycka på F8 för att köra koden ett steg i taget för att inspektera Locals-fönstret för ändringar, vid varje steg.
- Klicka på [+] Symbol för att expandera och visa både objektegenskaper och värden.
- Kontrollera Carea och p_Area Objektreferens i Värde kolumnen i Vol Objekt. Värdet där visas som Ingenting eftersom vi ännu inte har skickat CA Object till Vol Object.
- Om du har tittat klart innehållet i Locals Window kör du koden till nästa stopp påstående. Nu, Carea Skaffa Property Procedur och p_Area Objekt tilldelas med ClsArea Class Object.
Vi kommer att prova ett annat variantexempel av båda dessa två klasser ClsArea och ClsVolume2.
Ny klassmodul ClsVolume3.
1. Infoga en ny klassmodul och ändra dess namn Property Value till ClsVolume3 .
2. Kopiera och klistra in följande VBA-kod 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
Kontrollera koden från början:p_Height förklaras som enskild egendom. p_Area Egenskapen för klassen ClsVolume3 har deklarerats som offentlig ClsArea-objekt. Det betyder p_Area kommer att visas som en egenskap för klassen ClsVolume3 med sina egna visningsbara egenskaper för direkt Get/Let operationer i användarprogrammet i standardmodulen. Även om ClsArea Class Object har deklarerats som allmän egendom för ClsVolume3 Class, är dess egenskaper inkapslade i själva ClsArea Class.
Kontrollera Class_Initialize() och Class_Terminate() Underrutiner. ClsArea-objektet instansieras i Class_Initialize()-koden och tar bort objektet från minnet i Class_Terminate()-koden när användarprogrammet avslutas.
Testprogrammet.
Exempel på Test VBA-koden ges nedan.
Kopiera och klistra in koden i standardmodulen.
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
Visa Locals-fönstret (Visa - -> Locals-fönstret), om det inte redan är öppet.
Klicka någonstans i mitten av koden och tryck på F8 att exekvera VBA-koden en rad i taget och titta på det lokala fönstret för att spåra vad som händer vid varje steg.
Alla ovanstående varianter av ClsVolume Class har skrivits med mindre kod, förutom det första exemplet av ClsVolume Class.
Arbeta med postuppsättningsobjektet.
Nästa vecka kommer vi att arbeta med en inbyggd Object DAO.Recordset och bygg en klassmodul till:
- Beräkna och uppdatera ett fält,
- Sortera data,
- Skriv ut den sorterade datan i felsökningsfönstret,
- och skapa en klon av tabellen med sorterade data.
Det är mycket action nästa vecka.
Lista över alla länkar om detta ämne.
- MS-Access Class Module och VBA
- MS-Access VBA Class Object Arrays
- MS-Access basklass och härledda objekt
- VBA-basklass och härledda objekt-2
- Basklass- och härledda objektvarianter
- Ms-Access Recordset och Class Module
- Åtkomst till klassmoduler och omslagsklasser
- Omvandling av omslagsklassfunktionalitet
- Ms-Access och Collection Object Basics
- Ms-Access Class Module och Collection Object
- Tabellposter i samlingsobjekt och form
- Grundläggande om ordbokobjekt
- Dictionary Object Basics-2
- Sortera ordboksobjektnycklar och objekt
- Visa poster från ordbok till formulär
- Lägg till klassobjekt som ordboksobjekt
- Uppdatera Class Object Dictionary-objekt på formulär