Access
 sql >> Datenbank >  >> RDS >> Access

VBA-Basisklasse und abgeleitetes Objekt-2

Einführung.

Letzte Woche haben wir ein Objekt der abgeleiteten Klasse ClsVolume erstellt, das die Klasse ClsArea als Basisklasse verwendet. Wir haben Eigenschaftsprozeduren in der abgeleiteten Klasse erstellt, um die Eigenschaften und Funktionen der Basisklasse für die Benutzerprogramme des Objekts verfügbar zu machen. Diese Methode erfordert die Wiederholung aller Eigenschaftsprozeduren der Basisklasse auch in der abgeleiteten Klasse. Hier untersuchen wir, wie Sie dieselbe abgeleitete ClsVolume-Klasse erstellen, ohne die Eigenschaftsverfahren der Basis-ClsArea-Klasse zu wiederholen.

Wir haben die Verwendung von Get gelernt und Let Eigenschaftsverfahren in Klassen. Es gibt noch eine weitere Eigenschaftsprozedur, die in Klassen verwendet wird:Das Set Eigentumsverfahren. Die Set-Property-Prozedur weist ein Objekt direkt einem Klassenobjekt des gleichen Typs zu.

Bevor Sie fortfahren, können Sie die früheren Seiten zu diesem Thema besuchen, falls Sie dies noch nicht getan haben, die Links sind unten angegeben:

  • MS-Access-Klassenmodul und VBA
  • MS-Access-VBA-Klassenobjekt-Arrays
  • MS-Access-Basisklasse und abgeleitete Objekte

ClsVolume-Klasse, die Überarbeitung.

Wir werden eine andere Variante desselben ClsVolume-Klassenmoduls erstellen, das wir letzte Woche erstellt haben, mit ClsArea als Basisklasse, mit einem anderen Ansatz und mit weniger Code.

Erstellen Sie ein neues Klassenmodul und ändern Sie seinen Namenseigenschaftswert in ClsVolume2 .

Kopieren Sie den folgenden Code, fügen Sie ihn in das Klassenmodul ClsVolume2 ein und speichern Sie das Modul:

Option Compare Database
Option Explicit
'Method two-1
Private p_Height As Double
Private 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 * p_Height
End Function

„Neu Get und Einstellen Eigenschaftsverfahren für ClsArea ObjectsPublic Property Get CArea() As ClsArea Set CArea =p_AreaEnd PropertyPublic Property Set CArea(ByRef AreaValue As ClsArea) Set p_Area =AreaValueEnd Property

Wählen Sie Kompilieren aus Projektname aus Debug Menü zum Kompilieren des VBA-Codes in der Datenbank, um sicherzustellen, dass der gesamte VBA-Projektcode fehlerfrei ist. Wenn Sie in Ihren anderen VBA-Programmen auf einen Fehler gestoßen sind, suchen Sie bitte den Fehler, korrigieren Sie ihn und kompilieren Sie Ihr Projekt neu. Andernfalls funktioniert VBA IntelliSense, das eine Liste mit Eigenschaften und Funktionen von Objekten anzeigt, nicht. Das hindert uns nicht daran, Werte zu/von Objekteigenschaften zuzuweisen/abzurufen. Aber während des Lernens ist es wichtig zu sehen, dass die Eigenschaften eines Objekts erscheinen und die Liste als Assistent beim Codieren anzeigt.


Abrufen/Setzen statt Get/Let-Property-Prozedur.

Wir haben alle Eigenschaftsprozeduren von ClsArea, die in der letzten Version von ClsVolume Class erstellt wurden, weggelassen und durch ein Get/Set ersetzt Property-Prozeduren statt Get/Let . Überprüfen Sie den Deklarationsbereich, in dem wir p_Area deklariert haben wird als ClsArea-Klassenobjekt deklariert.

Wenn ein Objekt auf diese Weise deklariert wird, sollten wir normalerweise eine Instanz dieses Objekts in der Class_Initialize()-Prozedur im obigen Code erstellen. Wir haben es hier nicht gemacht, weil wir planen, es im Benutzerprogramm zu tun und seine Eigenschaften mit geeigneten Werten zu füllen und es dann an die ClsVolume2-Klasse zu übergeben, bevor die letzte Berechnungsphase ihre Werte verwendet.

Beachten Sie das Set CArea() Verfahren. Sein ByRef-Parameter AreaValue wird als ClsArea-Objekt deklariert. Es akzeptiert das ClsArea-Klassenobjekt, wenn es an den Property Set CArea(ByRef AreaValue as ClsArea) übergeben wird , in der Objektvariablen AreaValue, und weist der p_Area zu Eigentum von ClsVolume2 Objekt.

Das Get CArea() Die Eigenschaftsprozedur gibt das Objekt an das aufrufende Programm zurück.

In unseren früheren Programmen haben wir Eigenschaftsprozeduren für einzelne Elemente (Länge, Breite, Höhe) eines Objekts zur Zuweisung/Rückgabe geschrieben Werte An/Von Sie. Hier besteht der Unterschied darin, dass wir ein ganzes Objekt als Parameter an die Set-Prozedur übergeben. Um den Eigenschaftswert dieses Objekts (z. B. lblHeight) abzurufen, müssen wir es als CArea.dblLength adressieren . Das Get/Set Eigenschaft Prozedurname CArea wird das untergeordnete Objekt des Hauptobjekts, wenn es im Hauptprogramm deklariert wird, und auf ihre Eigenschaftsprozeduren kann direkt über die Objektadresse Vol.CArea.dblLength zugegriffen werden.

Ein Testprogramm im Standardmodul.

Wir werden ein kleines Programm in das Standardmodul schreiben, um unser neues abgeleitetes Klassenobjekt ClsVolume2 zu testen.

Fügen Sie ein neues Standardmodul in Ihr Projekt ein. Kopieren Sie den folgenden Code, fügen Sie ihn in das Modul ein und speichern Sie den Code:

Public Sub SetNewVol2_1()
'Method 1/2
Dim Vol As New ClsVolume2

'ClsArea Object instantiated and passed to the
'Property Procedure Set CArea in ClsVolume2.

Set Vol.CArea = New ClsArea 'declare and instantiate the object in one statement

Stop

Vol.CArea.strDesc = "Bed Room"
Vol.CArea.dblLength = 90
Vol.CArea.dblWidth = 10

Vol.dblHeight = 10 'assign height to ClsVolume2

Stop

Debug.Print "Description", "Length", "Width", "Area", "Height", "Volume"
Debug.Print Vol.CArea.strDesc, Vol.CArea.dblLength, Vol.CArea.dblWidth, Vol.CArea.Area, Vol.dblHeight, Vol.Volume

Set Vol.CArea = Nothing
Set Vol = Nothing

End Sub

Codeüberprüfung Zeile für Zeile.

.Lassen Sie uns einen kurzen Blick auf den obigen VBA-Code werfen. Die erste Zeile instanziiert die Klasse ClsVolume2 mit dem Namen Vol. Nach den nächsten beiden Kommentarzeilen das Set Anweisung mit dem Vol.CArea Property Procedure wird aufgerufen und übergibt New instanziierte ClsArea Objekt als Parameter.

Ich habe ein Stopp gesetzt -Anweisung in der nächsten Zeile, um dem Programm eine Pause zu geben und zu sehen, wie das Objekt dem Set zugewiesen wird Bereich Objekt. Wie? werden wir das gleich untersuchen?

Die nächsten vier Zeilen weisen dem ClsArea-Objekt und der Height-Eigenschaft des ClsVolume2-Objekts Werte zu.

Die nächste Haltestelle erzeugt eine Pause im Programm, damit wir den Speicher untersuchen können, wie die Werte im Speicher gehalten werden.

Nächste Zeile gibt die Überschriften im Debug-Fenster für die in der nächsten Zeile gedruckten Werte aus.

Die nächste Zeile gibt die Werte der Objekteigenschaften aus dem Speicher in das Debug-Fenster aus.

Führen Sie den Code bis zur nächsten Stop-Anweisung aus

Lassen Sie uns den Code ausführen und den Speicher untersuchen, um zu sehen, was dort in jeder Phase passiert, in der ich die Stop-Anweisung platziert habe.

  1. Klicken Sie irgendwo in die Mitte des Codes und drücken Sie F5 um den Code auszuführen und das Programm bei der ersten Stopp-Anweisung. anzuhalten
  2. Wählen Sie Lokales Fenster aus Ansicht Menü zum Öffnen eines neuen Fensters unterhalb des Codefensters, um anzuzeigen, wie die ClsArea- und ClsVolume2-Objekte, ihre Eigenschaften und ihre Member-Eigenschaftsprozeduren im Arbeitsspeicher gehalten werden. Ein Beispielbild des Locals-Fensters ist unten angegeben.

    Das Locals-Fenster Ansehen.



  3. Ziehen Sie die Ziehpunkte anderer Fenster nach oben, um ihre Höhe zu verringern und mehr Platz für die Anzeige von Locals zu schaffen Fenster. Besser, schließen Sie das Debug-Fenster vorerst, verwenden Sie Strg+G, um es später wieder aufzurufen, wenn es benötigt wird.

    Wir können eine grafische Ansicht aller Objekte und ihrer Eigenschaften in den Locals haben Fenster. Der erste Name mit dem Pluszeichen [+] zeigt den Namen des Standardmoduls, von dem aus unser Programm ausgeführt wird.

    Das nächste Pluszeichen [+] mit dem Namen Vol ist das von ClsVolume2 instanziierte Objekt im Speicher.

  4. Klicken Sie auf die [+]-Symbole, um die Details zu erweitern und anzuzeigen.

    Sie finden die nächste Ebene von Objekten und Eigenschaften.

    Der [+]CBereich zeigt an, dass dieses Objekt die nächste Ebene von Eigenschaften und deren Werten hat.

    Die dblHeight Die Get-Property-Prozedur kommt direkt unter das Vol-Objekt.

    Die [+]p_Area ist das als ClsArea deklarierte Privateigentum Klasse in der ClsVolume2-Klasse.

    Die p_Height ist auch das in ClsVolume2 deklarierte Privateigentum.

  5. Klicken Sie auf das Pluszeichen [+] Symbole zum Erweitern der Objekte, um ihre Eigenschaften und Werte anzuzeigen.

    Die Erweiterung von [+]CArea gibt uns die Ansicht des ClsArea-Objekts, das wir an die Eigenschaftsprozedur Set CArea() übergeben haben.

    Die Erweiterung von [+]p_Area gibt die Ansicht der als privat deklarierten ClsArea-Eigenschaft wieder.

    Beachten Sie die p_Area Privates Eigentum des Klassenobjekts ClsVolume2 und alle seine Elemente sind nur über CArea zugänglich Objekteigenschaft Get/Set Verfahren nach außen.

    Die zweite Spalte des Locals-Fensters zeigt die den Objekteigenschaften zugewiesenen Werte und derzeit keine Werte darin.

    Die dritte Spalte zeigt die Modulnamen des Datentyps oder der Objektklasse.

  6. Drücken Sie F5, um das Programm weiter auszuführen, bis es bei der nächsten Stop-Anweisung angehalten wird, um den Objekteigenschaften einige Werte zuzuweisen. Das Programm wird beim nächsten Stopp angehalten Erklärung. Überprüfen Sie das Locals-Fenster auf Änderungen der Werte.

Innerhalb des CArea Objekt die ersten beiden Zeilen mit den Werten 90, 10 und die letzte strDesc mit dem Wert "Bed Room" sind das Get Eigentumsverfahren. p_Desc, p_Length und p_width sind Werte, die durch Set zugewiesen werden Property-Prozeduren zu p_Area Eigenschaft des ClsVolume2-Klassenobjekts.

Die p_Area Das als privates Eigentum von ClsVolume2 deklarierte Objekt der ClsArea-Klasse wird mit seinem Get/Set gesehen Eigenschaftsverfahren und zugewiesene Werte.

Überprüfen Sie den Typ Spalte von [-]CArea und [-]p_Area beide Objekte sind von der ClsArea-Basisklasse abgeleitet.

Unterschiedliche Verwendung der Klassenobjekte ClsArea und ClsVolume2.

Nächste Woche werden wir einen anderen Ansatz mit denselben beiden Objekten ausprobieren. Wenn Sie es selbst ausprobieren möchten, hier ist der Hinweis, wie Sie es selbst ausprobieren können.

  1. Instanziieren Sie ClsVolume2 und ClsArea Class als zwei verschiedene Objekte im Standardmodulprogramm.
  2. Weisen Sie beiden Objekteigenschaften Werte zu.
  3. Weisen Sie das instanziierte ClsArea-Objekt dem CArea zu Objekt im ClsVolume2-Klassenobjekt, bevor die Werte im Debug-Fenster ausgegeben werden.

In diesem Beispiel können wir das gleiche Ergebnis wie im obigen Beispiel erzielen, ohne die Get/Let-Property-Prozeduren wie im ClsVolume-Klassenmodul zu wiederholen.

Die Links aller Seiten zu diesem Thema.

  1. MS-Access-Klassenmodul und VBA
  2. MS-Access-VBA-Klassenobjekt-Arrays
  3. MS-Access-Basisklasse und abgeleitete Objekte
  4. VBA-Basisklasse und abgeleitete Objekte-2
  5. Basisklasse und abgeleitete Objektvarianten
  6. Ms-Access Recordset und Klassenmodul
  7. Zugriff auf Klassenmodul und Wrapper-Klassen
  8. Umwandlung der Wrapper-Klassenfunktionalität
  9. Grundlagen von MS-Access und Erfassungsobjekten
  10. MS-Access-Klassenmodul und Sammlungsobjekt
  11. Tabellensätze in Sammlungsobjekt und Formular
  12. Wörterbuchobjekt-Grundlagen
  13. Wörterbuchobjekt-Grundlagen-2
  14. Sortieren von Dictionary-Objektschlüsseln und -Elementen
  15. Datensätze aus Wörterbuch in Formular anzeigen
  16. Klassenobjekte als Wörterbucheinträge hinzufügen
  17. Klassenobjekte als Wörterbucheinträge hinzufügen
  18. Klassenobjekt-Wörterbuchelement auf Formular aktualisieren