Wprowadzenie.
W zeszłym tygodniu próbowaliśmy przekazać obiekt klasy bazowej przez Set Procedura właściwości, aby stać się częścią obiektu w pamięci. Przekazany obiekt staje się rozszerzeniem lub obiektem podrzędnym obiektu głównego w pamięci. W naszym poprzednim programie przekazywanie obiektu podrzędnego do obiektu docelowego odbywało się w fazie tworzenia instancji naszego programu testowego. W dalszej części programu przypisaliśmy wartości przekazanym właściwościom obiektu. Następny przykład jest nieco inny.
Dla tych, którzy chcieliby zapoznać się z wcześniejszymi artykułami na temat modułu klasy MS-Access, linki znajdują się poniżej:
- Moduł klasy MS-Access i VBA
- Tablice obiektów klasy MS-Access VBA
- Klasa bazowa MS-Access i obiekty pochodne
- Klasa podstawowa VBA i obiekt pochodny-2
Tym razem otworzymy oba obiekty (ClsArea – klasa bazowa, ClsVolume2 – klasa docelowa) osobno w naszym programie testowym. Przypisz wartości do właściwości ClsArea klasy bazowej, przed przekazaniem ich do obiektu klasy docelowej ClsVolume2. Pamiętaj, że klasa Volume2 ma tylko jedną własną właściwość, p_Height Właściwość i jej metoda Volume() potrzebuje Długości i Szerokość Wartości klasy bazowej ClsArea do obliczenia objętości.
- Skopiuj i wklej następujący przykładowy kod testu do modułu standardowego.
Procedura SetNewVol2_2.
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
Przegląd kodu VBA.
W pierwszym przyciemnionym oświadczenie, CA jest zdefiniowany jako obiekt ClsArea i Vol jako obiekt ClsVolume2. Następne dwie instrukcje tworzą instancję obu obiektów w pamięci.
Następne trzy instrukcje przypisują wartości do właściwości obiektu klasy ClsArea.
Przystanek Instrukcja powoduje przerwę w wykonywaniu kodu, dzięki czemu możemy zweryfikować wartości właściwości obiektu w oknie Locals.
Ustaw Vol.CArea =CA instrukcja przypisuje urząd certyfikacji obiektu klasy ClsArea jako obiekt podrzędny do Vol (ClsVolume2) Obiekt.
W następnym kroku dblHeight Właściwość obiektu klasy ClsVolume2 ma przypisaną wartość 10.
Następne instrukcje przed instrukcją Stop wyświetlają wartości z pamięci do okna debugowania.
Następne dwa zestaw Polecenia usuwają obiekty z pamięci przed zakończeniem programu.
Wyświetl okno lokalne.
- Wybierz Okno Lokalne Opcja z menu Widok.
- Kliknij gdzieś w środku kodu i naciśnij F5 uruchomić kod, aż program zatrzyma się na Stopie oświadczenie. Możesz też nacisnąć F8 aby uruchomić kod krok po kroku, aby sprawdzić okno Locals pod kątem zmian, na każdym kroku.
- Kliknij [+] Symbol do rozwijania i wyświetlania właściwości i wartości obiektów.
- Sprawdź Carea i p_Area Odwołanie do obiektu w Wartości kolumna Tom Obiekt. Wartość tam jest wyświetlana jako Nic ponieważ nie przekazaliśmy jeszcze obiektu CA do obiektu Vol.
- Jeśli zakończyłeś przeglądanie zawartości okna Locals, uruchom kod do następnego Zatrzymania oświadczenie. Teraz Crea Uzyskaj procedurę dotyczącą własności i p_Area Obiekt jest przypisany do obiektu klasy ClsArea.
Wypróbujemy inny przykład wariantu obu tych dwóch klas ClsArea i ClsVolume2.
Nowy moduł klasy ClsVolume3.
1. Wstaw nowy moduł klasy i zmień jego nazwę Wartość właściwości na ClsVolume3 .
2. Skopiuj i wklej następujący kod VBA do modułu klasy ClsVolume3:
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
Sprawdź kod od początku:p_Height zgłoszone jako własność prywatna. p_Area Właściwość klasy ClsVolume3 zadeklarowana jako Publiczna Obiekt ClsArea. Oznacza to p_Area pojawi się jako Właściwość klasy ClsVolume3 z własnymi wyświetlanymi właściwościami dla bezpośredniego Pobierz/Pozwól operacje w Programie Użytkownika w Module Standard. Mimo że obiekt klasy ClsArea został zadeklarowany jako właściwość publiczna klasy ClsVolume3, jego właściwości są hermetyzowane w samej klasie ClsArea.
Sprawdź Class_Initialize() i Class_Terminate() Podprogramy. Obiekt ClsArea jest tworzony w kodzie Class_Initialize() i usuwa obiekt z pamięci w kodzie Class_Terminate() po zakończeniu programu użytkownika.
Program testowania.
Przykładowy testowy kod VBA podano poniżej.
Skopiuj i wklej kod do modułu standardowego.
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
Wyświetl okno Locals (Widok -> Okno Locals), jeśli nie jest jeszcze otwarte.
Kliknij gdzieś w środku kodu i naciśnij F8 aby wykonać kod VBA po jednej linii na raz i obserwować okno lokalne, aby śledzić, co dzieje się na każdym kroku.
Wszystkie powyższe warianty klasy ClsVolume zostały napisane z mniejszą ilością kodu, z wyjątkiem pierwszego przykładu klasy ClsVolume.
Praca z obiektem Recordset.
W przyszłym tygodniu będziemy pracować z wbudowanym obiektem DAO.Recordset i zbuduj moduł klasy do:
- Oblicz i zaktualizuj pole,
- Sortuj dane,
- Drukuj posortowane dane do okna debugowania,
- i utwórz klon tabeli z posortowanymi danymi.
To dużo akcji w przyszłym tygodniu.
Lista wszystkich linków na ten temat.
- Moduł klasy MS-Access i VBA
- Tablice obiektów klasy MS-Access VBA
- Klasa bazowa MS-Access i obiekty pochodne
- Klasa podstawowa VBA i obiekty pochodne-2
- Warianty klasy bazowej i obiektów pochodnych
- Ms-Access Recordset and Class Module
- Dostęp do modułu klas i klas opakowujących
- Transformacja funkcjonalności klasy opakowującej
- Podstawy dostępu do MS i obiektów kolekcji
- Moduł klasy Ms-Access i obiekt kolekcji
- Rekordy tabeli w obiekcie i formularzu kolekcji
- Podstawy obiektów słownikowych
- Podstawy obiektów słownika-2
- Sortowanie kluczy obiektów i elementów słownika
- Wyświetl rekordy ze słownika do formularza
- Dodaj obiekty klasy jako elementy słownika
- Aktualizuj element słownika obiektów klasy w formularzu