Access
 sql >> Baza danych >  >> RDS >> Access

Tablice obiektów klasy Ms-Access VBA

Wprowadzenie.

W zeszłym tygodniu mieliśmy krótkie wprowadzenie do prostego obiektu klasy niestandardowej z tylko dwiema właściwościami, dla Długości i Szerokość Wartości. Metoda obliczania Powierzchni czegokolwiek, z wartościami długości i szerokości. Mam nadzieję, że zrozumiałeś podstawy modułu klasy niestandardowej Ms-Access. Jeśli nie, oto link:Moduł klasy Ms-Access i VBA. Odwiedź tę stronę przed kontynuowaniem.

Class Module Objects zapisuje dużo kodu w twoich programach. Kiedy znajdziesz coś, co powtarzasz w kodzie, pomyśl o obiekcie modułu klasy. Powtarzający się kod można również przekształcić w funkcję użytkową, ale w przypadku obiektów klas musisz przyjąć inne podejście.

W przypadku prostego zadania może być potrzebne więcej kodu, aby udoskonalić funkcje obiektu Class Module, ale główne programy modułów będą proste, a cały skomplikowany kod opracowany i udoskonalony pozostanie ukryty przed innymi.

Ale na razie mamy prosty moduł klasy, spróbujemy stworzyć tablicę obiektów, aby obliczyć obszar wielu elementów.

Podprocedura ClassArray().

Przykładowy kod VBA w module Standard tworzy tablicę pięciu obiektów klasy ClsArea i drukuje ich wartości właściwości oraz wynik metody w oknie debugowania. Skopiuj i wklej (lub lepiej, jeśli je wpiszesz, aby lepiej poznać każdą linię, co robią) następujący kod do modułu standardowego:

Public Sub ClassArray()
Dim tmpA As ClsArea
Dim CA() As ClsArea
Dim j As Long, title As String
Dim L As Long, U As Long

title = "ClassArray"
For j = 1 To 5 ‘the Loop is set for 5 items
  'instantiate temporary ClsArea Object
  'to enter input
  Set tmpA = New ClsArea

tmpA.strDesc = InputBox(Str(j) & ") Description:", title, "")
     tmpA.dblLength = InputBox(Str(j) & ") Enter Length:", title, 0)
     tmpA.dblWidth = InputBox(Str(j) & ") Enter Width:", title, 0)
    
  'Redimension Array
  ReDim Preserve CA(1 To j) As ClsArea
  Set CA(j) = tmpA   'Copy Object to Array
  
Set tmpA = Nothing 'Remove temporary object from memory.
Next


‘PRINTING SECTION
'Print the Array contents into the Debug Window
L = LBound(CA)
U = UBound(CA)

Debug.Print "Description", "Length", "Width", "Area"
For j = L To U
  With CA(j)
    Debug.Print .strDesc, .dblLength, .dblWidth, .Area
  End With
Next

’stop

'Clear array objects from memory
For j = L To U
   Set CA(j) = Nothing
Next

End Sub
 

Kliknij gdzieś w środku kodu i naciśnij F5, aby wykonać kod. Wprowadź wartości opisu, długości i szerokości z klawiatury dla 5 różnych elementów, jeden po drugim.

Przykładowy przebieg programu jest podany poniżej:

Description   Length        Width         Area
Door Mat       5             8             40 
Carpet         12            23            276 
Bed Room       21            23            483 
Store Room     15            25            375 
Terrace        40            50            2000 

Przegląd linii kodu po linii.

Przeanalizujmy kod linia po linii. W obszarze deklaracji zadeklarowaliśmy zmienną obiektu tmpA typu ClsArea. W drugim wierszu zadeklarowano pustą tablicę CA() typu ClsArea. Wymagana liczba elementów zostanie ponownie zwymiarowana w dalszej części programu.

W kolejnych dwóch wierszach zadeklarowaliśmy zmienne title typu String i j, L, i U zmienne typu Long Integer.

Następnie zmienna title jest inicjowana ciągiem „ClassArray” i będzie używana jako tytuł w funkcji InputBox(). Dla….Dalej pętla jest ustawiana za pomocą zmiennej kontrolnej j uruchomić pętlę pięć razy. Po kolejnych dwóch wierszach komentarza Ustaw oświadczenie następuje (przydziela pamięć) Obiekt klasy ClsArea w pamięci o nazwie tmpA .

Następne trzy wiersze kodu służą do wprowadzania wartości dla strDesc , dblLength, i dblWidth Właściwości obiektu klasy tmpA.

Po następnym wierszu komentarza obiekt klasy ClsArea (CA) jest ponownie wymiarowany dla 1 do j razy (od 1 do 1 raz), zachowując istniejące elementy Object, jeśli takie istnieją (jest to pierwszy obiekt w tablicy). Będzie to rosło dzięki ReDim instrukcji, do 1 do 2, 1 do 3, 1 do 4 i 1 do 5, zachowując wcześniejsze wartości obiektów w For . . . Następna pętla. Ochrona słowo kluczowe zapewnia, że ​​istniejące obiekty tablicy nie zostaną utracone.

Uwaga: Instrukcja Re-Dimension zwiększa/zmniejsza liczbę określonych elementów obiektów, ale usuwa istniejące obiekty wczytane do tablicy wcześniej, bez Zachowaj słowo kluczowe.

Zestaw instrukcja w następnym wierszu kopiuje obiekt tmpA wraz z jego danymi do CA(j) Nowo utworzony obiekt ClsArea j element tablicy.

Następny wiersz Ustaw tmpA =Nic usuwa tymczasowy obiekt z pamięci.

Pętla For…Next powtarza tę czynność jeszcze cztery razy, aby wprowadzić inne elementy do nowo utworzonego obiektu tymczasowego tmpA, jeden po drugim, i kopiuje obiekt do tablicy obiektów CA.

Następne dwa wiersze, po wierszu komentarza, znajdź zakres indeksu Object Array (znajduje najniższy i najwyższy numer indeksu.

Następny Debug.Print instrukcja drukuje wiersz nagłówka w 14 strefach kolumn w oknie debugowania. Dla. . . Dalej pętla z L i U zakresy numerów indeksów tablicy powiązanej uruchamia wewnętrzne instrukcje, aby uzyskać dostęp do każdego obiektu z tablicy CA, z numerem indeksu w zmiennej kontrolnej j.

Bieżące odniesienie do obiektu jest ustawione w With. . . Zakończ na zamiast powtarzania nazwy obiektu CA(j).strDesc, CA(j).dblLength, CA(j).dblWidth i CA(j).Obszar aby wydrukować wyniki wartości właściwości obiektu i metody Area() w oknie debugowania.

Usuń symbol komentarza z „Zatrzymaj instrukcja, aby utworzyć pauzę w Programie w instrukcji Stop. Uruchom kod ponownie i wprowadź 5 szczegółów pozycji, aby móc poeksperymentować z obiektem tablicy. Możesz selektywnie adresować dowolną właściwość obiektu za pomocą numeru indeksu tablicy, aby edytować lub wydrukować dowolną wartość w oknie debugowania, jak pokazano poniżej.


Stwierdzenie Ustaw CA(j) =Nic w ramach For. . . Następna pętla czyści obiekty tablicy, jeden po drugim, z pamięci.

Przekaż tablicę obiektów klasy jako parametr funkcji.

Tablicę obiektów klasy możemy przekazać do programu jako parametr, tak jak to zrobiliśmy w przypadku typu danych zdefiniowanego przez użytkownika.

Stwórzmy prosty podprogram drukowania, wycinając kod sekcji drukowania programu głównego i umieszczając go w nowym programie.

Skopiuj kod podprogramu ClassArray(), wklej go w tym samym module standardowym i zmień nazwę na ClassArray2(), jak pokazano poniżej.

Public Sub ClassArray2()
Dim tmpA As ClsArea
Dim CA() As ClsArea
Dim j As Long, title As String
Dim L As Long, U As Long

title = "ClassArray"
For j = 1 To 5 ‘the Loop is set for 5 items
  'instantiate temporary ClsArea Object
  'to enter input
  Set tmpA = New ClsArea

     tmpA.strDesc = InputBox(Str(j) & ") Description:", title, "")
     tmpA.dblLength = InputBox(Str(j) & ") Enter Length:", title, 0)
     tmpA.dblWidth = InputBox(Str(j) & ") Enter Width:", title, 0)
    
  'Redimension Array
  ReDim Preserve CA(1 To j) As ClsArea
  Set CA(j) = tmpA   'Copy Object to Array
  
 Set tmpA = Nothing 'Remove temporary object from memory.
Next

‘PRINTING SECTION
'Print the Array contents into the Debug Window
L = LBound(CA)
U = UBound(CA)

Debug.Print "Description", "Length", "Width", "Area"
For j = L To U
  With CA(j)
    Debug.Print .strDesc, .dblLength, .dblWidth, .Area
  End With
Next

’stop

'Clear array objects from memory
For j = L To U
   Set CA(j) = Nothing
Next

End Sub
 

Kod ClassArray2 bez sekcji drukowania.

Utwórz nowy podprogram, jak podano poniżej:

Public Sub ClassPrint(ByRef clsPrint() As ClsArea)
Dim L As Long, U As Long
Dim j As Long

End Sub

Podświetl sekcję Drukowanie do instrukcji „Stop” w programie ClassArray2(), wytnij podświetlony obszar kodu i wklej go poniżej Dim oświadczenia w ClassPrint() Program. Zmodyfikowana wersja obu Kodów jest podana poniżej:

Public Sub ClassArray2()
Dim tmpA As ClsArea
Dim CA() As ClsArea
Dim j As Long, title As String

title = "ClassArray"
For j = 1 To 5 ‘the Loop is set for 5 items
  'instantiate temporary ClsArea Object
  'to enter input
  Set tmpA = New ClsArea
     tmpA.strDesc = InputBox(Str(j) & ") Description:", title, "")
     tmpA.dblLength = InputBox(Str(j) & ") Enter Length:", title, 0)
     tmpA.dblWidth = InputBox(Str(j) & ") Enter Width:", title, 0)
    
  'Redimension Array
  ReDim Preserve CA(1 To j) As ClsArea
  Set CA(j) = tmpA   'Copy Object to Array
  
 Set tmpA = Nothing 'Remove temporary object from memory.
Next

Call ClassPrint(CA) ‘Pass the Object Array to print routine

'Clear array objects from memory
For j = L To U
   Set CA(j) = Nothing
Next

End Sub

Program ClassPrint().

Public Sub ClassPrint(ByRef clsPrint() As ClsArea)
Dim L As Long, U As Long
Dim j As Long

'Printing Section
'Print the Array Contents into the Debug Window.
L = LBound(clsPrint)
U = UBound(clsPrint)

Debug.Print "Description", "Length", "Width", "Area"
For j = L To U
  With clsPrint(j)
    Debug.Print .strDesc, .dblLength, .dblWidth, .Area
  End With
Next

End Sub

Sprawdź zmiany w kodzie w obu programach i dokonaj poprawek, jeśli ma to zastosowanie. Kliknij w środku kodu ClassArray2() i naciśnij klawisz F5, aby uruchomić program.

Instrukcja Call w pierwszym programie przekazuje tablicę obiektów klasy CA jako parametr ByRef do podprogramu ClassPrint(). Program wypisuje właściwości obiektu i wywołuje funkcję Area() w celu obliczenia i zwrócenia wartości do wydrukowania.

W przyszłym tygodniu dowiemy się, jak używać naszego modułu ClsArea Class jako klasy bazowej do tworzenia nowego obiektu klasy VBA w celu obliczenia Głośności czegoś.

  1. Moduł klasy MS-Access i VBA
  2. Tablice obiektów klasy MS-Access VBA
  3. Klasa bazowa MS-Access i obiekty pochodne
  4. Klasa podstawowa VBA i obiekty pochodne-2
  5. Warianty klasy bazowej i obiektów pochodnych
  6. Ms-Access Recordset and Class Module
  7. Dostęp do modułu klas i klas opakowujących
  8. Transformacja funkcjonalności klasy opakowującej
  9. Podstawy dostępu do MS i obiektów kolekcji
  10. Moduł klasy Ms-Access i obiekt kolekcji
  11. Rekordy tabeli w obiekcie i formularzu kolekcji
  12. Podstawy obiektów słownikowych
  13. Podstawy obiektów słownika-2
  14. Sortowanie kluczy obiektów i elementów słownika
  15. Wyświetl rekordy ze słownika do formularza
  16. Dodaj obiekty klasy jako elementy słownika
  17. Aktualizuj element słownika obiektów klasy w formularzu


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sprawdź najnowsze wiadomości dotyczące Microsoft Access, w tym Access 2022!

  2. Używanie widoków SQL do dodawania/edycji danych w programie Microsoft Access

  3. Wprowadzenie do łączenia danych i relacji

  4. Migracja bazy danych dostępu do SQL Server

  5. Microsoft SQL Server – Dołącz do mnie na SQL Saturday Dallas