Úvod.
Existují případy, kdy je potřeba konkrétní modul třídy vytvořit více než jednou, aby bylo možné použít podobnou sadu hodnot pro konkrétní aplikaci.
Například náš modul třídy ClsArea, který jsme navrhli pro výpočet plochy koberce místností, je kandidátem pro podobné aplikace. Předpokládejme, že bychom chtěli zjistit, kolik dlaždic potřebujeme položit v místnosti, pak bychom měli být schopni zadat také hodnoty délky a šířky dlaždice kromě hodnot rozměrů podlahy. Protože podlaha i dlaždice mají jako vstup podobné hodnoty vlastností, můžeme použít dvě instance modulu třídy ClsArea, jednu instanci pro oblast PODLAHA a druhou instanci pro oblast TILE. Plocha podlahy / Plocha dlaždic udává celkový počet dlaždic pro konkrétní místnost.
Dvě instance stejného modulu třídy.
Můžeme to udělat vytvořením dvou různých instancí modulu třídy ClsArea v programu standardního modulu, pokud existuje pouze jedna místnost.
Public Sub FloorTiles() Dim FLOOR As ClsArea Dim TILES As ClsArea Dim flrArea As Double, tilearea As Double Dim lngTiles As Long Set FLOOR = New ClsArea Set TILES = New ClsArea FLOOR.strDesc = "Bed Room1" FLOOR.dblLength = 25 FLOOR.dblWidth = 15 flrArea = FLOOR.Area() TILES.strDesc = "Off-White" TILES.dblLength = 2.5 TILES.dblWidth = 1.25 tilearea = TILES.Area() lngTiles = flrArea / tilearea Debug.Print FLOOR.strDesc & " Required Tiles: " & lngTiles & " Numbers - Color: " & TILES.strDesc Set FLOOR = Nothing Set TILES = Nothing End Sub
Zacházení s polem objektů.
Ale co když potřebujeme použít výše uvedenou metodu pro řadu několika místností s různými velikostmi nebo barvami dlaždic? Odpovědí na to je vytvoření nového modulu třídy se dvěma instancemi stejné ClsArea Třída, jedna instance pro Podlaží, a druhý pro Dlaždice Vlastnosti. Obě instance jsou zabaleny do nového modulu třídy.
Pojďme to udělat.
- Otevřete databázi a zobrazte okno pro úpravu kódu (ALT+F11).
- Vyberte Modul třídy z Vložit Menu.
- Změňte Název Hodnota vlastnosti na ClsTiles .
- Zkopírujte a vložte následující kód VBA do modulu třídy ClsTiles a uložte kód:
Option Compare Database Option Explicit Private pFLOOR As ClsArea Private pTILES As ClsArea Private Sub Class_Initialize() Set pFLOOR = New ClsArea Set pTILES = New ClsArea End Sub Private Sub Class_Terminate() Set pFLOOR = Nothing Set pTILES = Nothing End Sub Public Property Get Floor() As ClsArea Set Floor = pFLOOR End Property Public Property Set Floor(ByRef NewValue As ClsArea) Set pFLOOR = NewValue End Property Public Property Get Tiles() As ClsArea Set Tiles = pTILES End Property Public Property Set Tiles(ByRef NewValue As ClsArea) Set pTILES = NewValue End Property Public Function NoOfTiles() As Long NoOfTiles = pFLOOR.Area() / pTILES.Area() End Function
Obě instance, pFLOOR a pTILES jsou deklarovány jako soukromé vlastnosti objektu třídy ClsTiles.
Funkce Class_Initialize() Podprogram vytvoří instanci obou objektů v paměti při ClsTiles Modul třídy je vytvořen v uživatelském programu.
Funkce Class_Terminate() podprogram odstraní z paměti obě instance (pFLOOR a pTILES), když je instance modulu třídy ClsTiles v uživatelském programu nastavena na hodnotu Nothing.
Možnost Získat a Nastavit Procedury vlastností umožňují načítání a přiřazování hodnot z instance pFLOOR a do instance v daném pořadí v objektu třídy ClsTiles.
Další procedura získání a nastavení vlastností umožňuje stejné operace v instanci pTILES třídy ClsArea.
Přidali jsme novou funkci NoOfTiles() v novém modulu třídy k výpočtu počtu dlaždic na základě rozměru podlahové plochy a dlaždic.
Pojďme napsat program a naučit se používat více instancí stejného objektu třídy v novém modulu třídy:ClsTiles.
- Zkopírujte a vložte následující kód VBA do standardního modulu:
Public Sub TilesCalc() Dim FTiles As ClsTiles Dim TotalTiles As Long Set FTiles = New ClsTiles FTiles.Floor.strDesc = "Warehouse" FTiles.Floor.dblLength = 100 FTiles.Floor.dblWidth = 50 FTiles.Tiles.dblLength = 2.5 FTiles.Tiles.dblWidth = 1.75 TotalTiles = FTiles.NoOfTiles() Debug.Print "Site Name", "Floor Area", "Tile Area", "No. of Tiles" Debug.Print FTiles.Floor.strDesc, FTiles.Floor.Area, FTiles.Tiles.Area, TotalTiles End Sub
- Chcete-li vytisknout testovací data, nechejte okno ladění otevřené (CTRL+G).
- Klikněte někam doprostřed kódu VBA a stiskněte F5 Klíč ke spuštění kódu. Výsledek se vytiskne v okně ladění.
Pokud chcete vypočítat požadavky na dlaždice pro několik místností nebo místností několika podlaží výškové budovy, měli byste výše uvedený program několikrát spustit a poznamenat si hodnoty, což je prakticky velmi obtížné.
Nalezení požadavku na dlaždice pro několik místností.
Nyní napíšeme další program pro nalezení požadavků na dlaždice pro několik místností s polem ClsTiles Objekty zadáním hodnot vlastností přímo z klávesnice.
- Zkopírujte a vložte následující kód VBA do standardního modulu.
Public Sub TilesCalc2() Dim tmpFT As ClsTiles Dim FTiles() As ClsTiles Dim j As Long, L As Long, H As Long For j = 1 To 3 Set tmpFT = New ClsTiles 'Floor dimension With tmpFT.Floor .strDesc = InputBox(Str(j) & ") Floor Desc", , 0) .dblLength = InputBox(Str(j) & ") Floor Length", , 0) .dblWidth = InputBox(Str(j) & ") Floor Width", , 0) End With 'Tile Dimension With tmpFT.Tiles .strDesc = InputBox(Str(j) & ") Tiles Desc", , 0) .dblLength = InputBox(Str(j) & ") Tile Length", , 0) .dblWidth = InputBox(Str(j) & ") Tile Width", , 0) End With ReDim Preserve FTiles(1 To j) As ClsTiles Set FTiles(j) = tmpFT Set tmpFT = Nothing Next 'Take Printout L = LBound(FTiles) H = UBound(FTiles) Debug.Print "FLOOR", "Floor Area", "TILES", "Tile Area", "Total Tiles" For j = L To H With FTiles(j) Debug.Print .Floor.strDesc, .Floor.Area(), .Tiles.strDesc, .Tiles.Area(), .NoOfTiles End With Next 'Remove all objects from memory For j = L To H Set FTiles(j) = Nothing Next End Sub
- Ponechejte otevřené okno ladění, aby se výstup vytiskl.
- Spusťte kód jako dříve a zadejte hodnoty pro rozměry podlahy a dlaždic pro tři místnosti.
Jak můžete vidět z výše uvedeného kódu, obě hodnoty dimenzí Místnost a Dlaždice jdou do stejné instance Class Object Array, vedle sebe.
Výše uvedený program je demo, které běží pouze pro tři sady hodnot v rámci For. . . Další smyčka. Lze jej upravit pomocí podmíněné smyčky, která běží požadovaný počet opakování, dokud kód podmíněného přerušení neukončí program.
Program lze upravit tak, aby se každá sada hodnot dat a výsledky výpočtů uložila do tabulky pro budoucí použití.
Třída Wrapper je Kontejner Třída pro instance jiných tříd, datových struktur nebo kolekce instancí jiných objektů. Zde jsme jej použili k uložení dvou instancí stejné třídy Object.
Seznam všech odkazů na toto téma.
- MS-Access Class Module a VBA
- Pole objektů třídy VBA MS Access
- Základní třída MS-Access a odvozené objekty
- Základní třída VBA a odvozené objekty-2
- Základní třída a varianty odvozených objektů
- Sada záznamů a modul třídy Ms-Access
- Přístup k modulu třídy a třídám Wrapper
- Transformace funkčnosti třídy Wrapper
- Základy přístupu a shromažďovacích objektů
- Modul třídy Ms-Access a objekt kolekce
- Záznamy tabulek v objektu a formuláři kolekce
- Základy objektů slovníku
- Základy objektů slovníku-2
- Řazení klíčů a položek objektů slovníku
- Zobrazení záznamů ze slovníku do formuláře
- Přidat objekty třídy jako položky slovníku
- Přidat objekty třídy jako položky slovníku
- Aktualizovat položku slovníku objektů třídy ve formuláři