Einführung.
Letzte Woche haben wir ein Beispiel ausprobiert, um ein Basisklassenobjekt durch das Set zu übergeben Eigenschaftsprozedur, um Teil des Objekts im Speicher zu werden. Das übergebene Objekt wird zu einem Erweiterungs- oder untergeordneten Objekt des Hauptobjekts im Speicher. In unserem früheren Programm erfolgte die Übergabe des untergeordneten Objekts an das Zielobjekt in der Instanziierungsphase unseres Testprogramms. Wir haben den übergebenen Objekteigenschaften im späteren Teil des Programms Werte zugewiesen. Das nächste Beispiel ist etwas anders.
Für diejenigen, die die früheren Artikel zum MS-Access-Klassenmodul durchgehen möchten, sind die Links unten angegeben:
- MS-Access-Klassenmodul und VBA
- MS-Access-VBA-Klassenobjekt-Arrays
- MS-Access-Basisklasse und abgeleitete Objekte
- VBA-Basisklasse und abgeleitetes Objekt-2
Diesmal werden wir beide Objekte (ClsArea – die Basisklasse, ClsVolume2 – die Zielklasse) separat in unserem Testprogramm öffnen. Weisen Sie den ClsArea-Eigenschaften der Basisklasse Werte zu, bevor Sie sie an das ClsVolume2-Objekt der Zielklasse übergeben. Denken Sie daran, dass die Volume2-Klasse nur eine eigene Eigenschaft hat, die p_Height Eigenschaft und ihre Methode Volume() benötigt die Länge und Breite Werte der Basisklasse ClsArea zur Berechnung des Volumens.
- Kopieren Sie den folgenden Beispieltestcode und fügen Sie ihn in ein Standardmodul ein.
Das SetNewVol2_2-Verfahren.
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
Überprüfung des VBA-Codes.
Im ersten Dim Anweisung, CA ist als ClsArea-Objekt und Vol definiert als ClsVolume2-Objekt. Die nächsten beiden Anweisungen instanziieren beide Objekte im Speicher.
Die nächsten drei Anweisungen weisen den Eigenschaften von ClsArea Class Object.
Werte zuDer Halt -Anweisung gibt eine Pause in der Codeausführung, damit wir die Object Property-Werte im Locals-Fenster überprüfen können.
Das Set Vol.CArea =CA -Anweisung weist das ClsArea-Klassenobjekt CA als untergeordnetes Objekt dem Vol zu (ClsVolume2) Objekt.
Im nächsten Schritt dblHeight Property of ClsVolume2 Class Object wird der Wert 10 zugewiesen.
Die nächsten Anweisungen vor der Stop-Anweisung geben die Werte aus dem Speicher in das Debug-Fenster aus.
Die nächsten beiden Sets Statements entfernt die Objekte aus dem Speicher, bevor das Programm beendet wird.
Lokale Fenster anzeigen.
- Wählen Sie Lokales Fenster Option aus dem Ansicht-Menü.
- Klicken Sie irgendwo in die Mitte des Codes und drücken Sie F5 um den Code auszuführen, bis das Programm am Stopp pausiert Erklärung. Alternativ können Sie F8 drücken um den Code Schritt für Schritt auszuführen, um das Locals-Fenster bei jedem Schritt auf Änderungen zu überprüfen.
- Klicken Sie auf das [+] Symbol zum Erweitern und Anzeigen von Objekteigenschaften und Werten.
- Überprüfen Sie den CArea und p_Area Objektreferenz im Wert Spalte des Vol Objekt. Der Wert darin wird als Nichts angezeigt weil wir das CA-Objekt noch nicht an das Vol-Objekt übergeben haben.
- Wenn Sie den Inhalt des Locals-Fensters vollständig angesehen haben, führen Sie den Code bis zum nächsten Stopp aus Erklärung. Nun, die CArea Property Procedure und p_Area abrufen Objekt werden mit dem ClsArea-Klassenobjekt zugewiesen.
Wir werden ein weiteres Variantenbeispiel dieser beiden Klassen ClsArea und ClsVolume2 ausprobieren.
Neues Klassenmodul ClsVolume3.
1. Fügen Sie ein neues Klassenmodul ein und ändern Sie seinen Namenseigenschaftswert in ClsVolume3 .
2. Kopieren Sie den folgenden VBA-Code und fügen Sie ihn in das ClsVolume3-Klassenmodul ein:
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
Überprüfen Sie den Code von Anfang an:p_Height als Privateigentum deklariert. Die p_Area Als Public deklarierte Eigenschaft der Klasse ClsVolume3 ClsArea-Objekt. Das bedeutet p_Area erscheint als Eigenschaft der Klasse ClsVolume3 mit eigenen anzeigbaren Eigenschaften für direktes Get/Let Operationen im Benutzerprogramm im Standardmodul. Obwohl das ClsArea-Klassenobjekt als öffentliches Eigentum der ClsVolume3-Klasse deklariert wurde, sind seine Eigenschaften in der ClsArea-Klasse selbst gekapselt.
Überprüfen Sie die Class_Initialize() und Class_Terminate() Unterroutinen. Das ClsArea-Objekt wird im Class_Initialize()-Code instanziiert und entfernt das Objekt im Class_Terminate()-Code aus dem Speicher, wenn das Benutzerprogramm endet.
Das Testprogramm.
Der Beispiel-Test-VBA-Code ist unten angegeben.
Kopieren Sie den Code und fügen Sie ihn in das Standardmodul ein.
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
Zeigen Sie das Locals-Fenster an (Ansicht -> Locals-Fenster), falls es noch nicht geöffnet ist.
Klicken Sie irgendwo in die Mitte des Codes und drücken Sie F8 um den VBA-Code zeilenweise auszuführen und das lokale Fenster zu beobachten, um zu verfolgen, was bei jedem Schritt passiert.
Alle obigen Varianten der ClsVolume-Klasse wurden mit weniger Code geschrieben, mit Ausnahme des ersten Beispiels der ClsVolume-Klasse.
Arbeiten mit dem Recordset-Objekt.
Nächste Woche werden wir mit einem eingebauten Objekt DAO.Recordset arbeiten und erstellen Sie ein Klassenmodul zu:
- Ein Feld berechnen und aktualisieren
- Sortieren Sie die Daten,
- Drucken Sie die sortierten Daten in das Debug-Fenster,
- und Erstellen Sie einen Klon der Tabelle mit sortierten Daten.
Das ist jede Menge Action nächste Woche.
Liste aller Links zu diesem Thema.
- MS-Access-Klassenmodul und VBA
- MS-Access-VBA-Klassenobjekt-Arrays
- MS-Access-Basisklasse und abgeleitete Objekte
- VBA-Basisklasse und abgeleitete Objekte-2
- Basisklasse und abgeleitete Objektvarianten
- Ms-Access Recordset und Klassenmodul
- Zugriff auf Klassenmodul und Wrapper-Klassen
- Umwandlung der Wrapper-Klassenfunktionalität
- Grundlagen von MS-Access und Erfassungsobjekten
- MS-Access-Klassenmodul und Sammlungsobjekt
- Tabellensätze in Sammlungsobjekt und Formular
- Wörterbuchobjekt-Grundlagen
- Wörterbuchobjekt-Grundlagen-2
- Sortieren von Dictionary-Objektschlüsseln und -Elementen
- Datensätze aus Wörterbuch in Formular anzeigen
- Klassenobjekte als Wörterbucheinträge hinzufügen
- Klassenobjekt-Wörterbuchelement auf Formular aktualisieren