Výukový program a príklady k modulu VBA

Tento tutoriál vás naučí o moduloch triedy vo VBA. Dozviete sa, čo sú zač a ako ich používať.

Moduly triedy VBA - úvod

Keď vložíte moduly do editora jazyka Visual Basic (VBE) a zadáte kód, pravdepodobne ste si všimli, že môžete vložiť aj to, čo sa nazýva „modul triedy“.

Moduly triedy vs. moduly

Moduly triedy fungujú veľmi odlišne od bežných modulov v tom, že uľahčujú vytváranie komponentového objektového modelu (COM), ktorý je potom možné použiť v rámci normálneho kódu VBA.

Účinne vytvoríte objekt, ktorý funguje rovnako ako vstavaný objekt programu Excel, napríklad „Pracovné listy“. V objekte Pracovné listy máte niekoľko vlastností a metód, ktoré vám umožňujú získať počet pracovných hárkov v zošite alebo pri každom jednotlivom názve pracovného hárka alebo v mnohých ďalších informáciách.

Keď týmto spôsobom vytvoríte nový objekt, vytvoríte stavebný blok, ktorý možno použiť kdekoľvek v rámci VBA. Objekt má množstvo vlastností a metód, ku ktorým má váš kód VBA prístup odkiaľkoľvek v zošite bez toho, aby ste museli kód znova písať.

Okrem odkazu na váš nový objekt zo štandardného modulu VBA ho môžete použiť aj v kóde UserForm, ktorý je súčasťou vašej vlastnej aplikácie.

Môžete ho použiť aj tam, kde ste na pracovný hárok umiestnili ovládacie prvky Active X, napríklad príkazové tlačidlo alebo rozbaľovaciu ponuku. Všetky tieto ovládacie prvky používajú VBA a váš nový objekt je možné ľahko začleniť do kódu udalosti týchto ovládacích prvkov.

Svoj objekt môžete tiež zmeniť na doplnok programu Excel. Váš objekt bude automaticky dostupný pre ostatných používateľov, ktorí majú tento doplnok načítaný. Do vašej aplikácie Excel sa tak pridá vaša vlastná viacúrovňová architektúra

Excel je viacúrovňová aplikácia. Existuje vrstva klientskych služieb, ktorá riadi skutočné okno pracovného hárka, s ktorým je používateľ oboznámený. Objektový model programu Excel je ďalšou vrstvou pod ním. Stlačte kláves F2 v module VBA a uvidíte obrovský počet objektov a členov týchto objektov, ktoré sú nástrojom programu Excel. Všimnite si, že tu sa zobrazí aj váš nový objekt.

Nakoniec, pod tým všetkým máte vrstvu dátových služieb, ktorá obsahuje všetky údaje, ktoré ste zadali do pracovných hárkov a buniek. Excel k tomu pristupuje pomocou objektového modelu Excel.

Vytvorenie modulu triedy vám umožní rozšíriť objektový modul programu Excel o vaše vlastné objekty a členy

Tento článok vám vysvetľuje, ako vytvoriť jednoduchú hierarchiu objektov pomocou modulov triedy.

Výhody použitia modulov triedy

  1. Môžete vyvinúť robustný stavebný blok, ktorý možno použiť v ľubovoľnom počte rôznych aplikácií Excel
  2. Po dôkladnom testovaní sa dá spoľahnúť na to, že vždy prinesie správne výsledky rovnakým spôsobom ako vstavané objekty programu Excel.
  3. Ak dôjde k aktualizácii kódu na inom mieste aplikácie, nový objekt bude naďalej fungovať rovnakým spôsobom
  4. Nový objekt môžete použiť ako doplnok v iných aplikáciách programu Excel
  5. Objekty je možné znova použiť v iných aplikáciách a pomáhajú pri ladení

Nevýhody používania triedových modulov

  1. Ich vytvorenie a pochopenie môže byť náročné.
  2. Konvencie pomenovania sú veľmi dôležité, pretože to uvidíte, keď použijete svoj objekt v normálnom module.
  3. Ak ste predtým nevytvorili modul triedy, môže byť ťažké ich pochopiť a existuje strmá krivka učenia
  4. Nie je možné vykonať zmeny za behu-musíte projekt znova nastaviť.
  5. Ak majú vlastnosti a súkromné ​​premenné rovnaký názov, môžu nastať nekonečné slučky, ktoré spôsobia chyby

Vloženie modulu triedy

Vyberte Vložiť | Class Module z ponuky VBE (Editor jazyka Visual Basic). Nový modul triedy sa bude automaticky nazývať „trieda 1“, ale to je potrebné ihneď zmeniť na názov, ktorý budete používať pre svoj objekt

Názov zmeníte v okne Vlastnosti, kde ukazuje šípka. Jednoducho zadáte svoje nové meno a to sa zmení v kolekcii Moduly triedy

Ak okno Vlastnosti nie je viditeľné, vyberte Zobraziť | Vlastnosti v ponuke VBE alebo stlačte F4

Zavolajte svoj nový modul triedy „MyItem“ a dvojitým kliknutím na názov v stromovom prehľade v programe Project Explorer zobrazte okno kódu.

Vytvorenie položky objektu

Tento príklad vytvorí objekt najvyššej úrovne s názvom „MyItems“ a pod ním členský objekt s názvom „MyItem“, ktorý bude uchovávať jednotlivé údaje pre každú položku. Po vytvorení bude fungovať rovnako ako vstavaný objekt programu Excel. Existuje napríklad objekt s názvom „Pracovné listy“, ktorý je zbierkou každého pracovného hárka vo vašom zošite. Existuje aj objekt s názvom „List“, ktorý predstavuje každý jednotlivý pracovný hárok vo vašom zošite a obsahuje všetky vlastnosti a metódy pre každý pracovný hárok. Tento objekt sa týka zbierkového predmetu „Pracovné listy“.

Môžete iterovať prostredníctvom zbierky „pracovné listy“ a postupne si prezrieť každý „list“. Rovnakým spôsobom budete môcť iterovať prostredníctvom zbierky „MyItems“ a zobrazovať vlastnosti, ktoré ste vytvorili v člene „Myitem“.

Prvá vec, ktorú musíte urobiť, je vytvoriť čiastkový objekt pre členskú úroveň, ktorý bude obsahovať skutočné položky v kolekcii objektu najvyššej úrovne. Toto je ekvivalent členov (napr. Názov, viditeľný, počet) v objekte „List“ v programe Excel. Tento kód sa zadáva do modulu triedy s názvom „MyItem“

Moduly triedy majú vlastnosti a metódy. Vlastnosti sú v skutočnosti podobné premenným v tom, že uchovávajú hodnoty údajov ako premenné a metódy sú ako čiastkové rutiny alebo funkcie.

V čiastkovom objekte vytvoríme pre objekt dve vlastnosti - Položka a Detail

Na začiatku je potrebné deklarovať dve reťazcové premenné, aby obsahovali hodnoty vlastností:

12 Súkromná položka ako reťazecSúkromný mDetail ako reťazec

Tieto je potrebné deklarovať v sekcii Vyhlásenia v hornej časti kódu modulu triedy, aby ich bolo možné použiť vo všetkých čiastkových rutinách v celom module

Musia mať jedinečné názvy, aby sa líšili od vlastností, ktoré sa chystáme vytvoriť, takže pred každé meno je umiestnené „m“ (pre člena).

Premenné sú deklarované ako súkromné, takže ich nemôže vidieť ktokoľvek, kto používa objekt. Sú to pracovné premenné na použitie v objektovom kóde a nie sú tam súčasťou konečného objektu.

Ďalším krokom je nastavenie kódu, ktorý umožní prístup k dvom vlastnostiam. Vykonáte to pomocou príkazu Property Let a Property Get pre každé vlastníctvo. Tieto musia byť verejné, inak objekt najvyššej úrovne nebude mať žiadne viditeľné vlastnosti

123456789101112131415 Položka verejného majetku (položka vdata ako reťazec)mItem = vdataKoncová nehnuteľnosťVerejný majetok Získajte položku () ako reťazecPoložka = položkaKoncová nehnuteľnosťVerejný majetok Nech detail (vdata ako reťazec)mDetail = vdataKoncová nehnuteľnosťVerejný majetok Získať detail () ako reťazecDetail = mDetailKoncová nehnuteľnosť

Tento kód vytvára prostriedky na čítanie a zápis hodnôt dvoch vlastností (Položka a Detail) pomocou dvoch súkromných premenných, ktoré boli definované v sekcii deklarácií modulu.

Parameter „vdata“ sa používa na prenos údajov do príslušného vlastníctva.

Je dôležité, aby každá vlastnosť mala vyhlásenie „Let“ a „Get“ a aby bol názov vlastnosti v každom prípade rovnaký. Ak by ste napísali nesprávne, mohli by ste skončiť s dvoma rôznymi vlastnosťami - jednou, z ktorej môžete čítať a do ktorej môžete písať!

Na pomoc pri vytváraní tohto kódu môžete použiť Vložiť | Postup v ponuke VBE na vytvorenie kostry kódu, ktorá vytvorí počiatočný kód pre vlastnosti „Získať“ a „Nechať“ pre názov danej vlastnosti

Zobrazí sa vyskakovacie okno, do ktorého napíšete názov vlastnosti a na prepínačoch vyberiete „Vlastníctvo“:

Kliknite na „OK“ a kostrový kód sa pridá do modulu triedy:

1234567 Verejný majetok Získať MyProperty () ako variantKoncová nehnuteľnosťPublic Property Let MyProperty (ByVal vNewValue As Variant)Koncová nehnuteľnosť

Tým sa zabráni akýmkoľvek chybám v názvoch vlastností. Jednoducho zadajte svoj kód medzi vyhlásenia „Verejné vlastníctvo“ a „Koncové vlastníctvo“.

Teraz máte objekt s názvom „MyItem“, ktorý bude uchovávať všetky údaje pre toto cvičenie.

Ste unavení z hľadania príkladov kódu VBA? Skúste AutoMacro!

Vytvorenie zbierky

Ďalšou fázou je vytvorenie objektu najvyššej úrovne ako objektu Collection, ktorý umožní prístup k vlastnostiam, ktoré ste nastavili v objekte „MyItem“

Opäť platí, že musíte definovať fungujúci objekt tak, aby pôsobil ako objekt zbierky, rovnakým spôsobom, akým ste definovali dve reťazcové premenné v objekte „MyItem“.

1 Súkromné ​​položky ako zbierka

Toto musí mať opäť jedinečný názov, a preto je pred názvom „m“ (členský objekt) a je tiež deklarovaný ako „súkromný“, aby sa nezobrazoval pri vytváraní nového objektu. použité

Ďalej musíte vyplniť kód Class_Initialize. Spustí sa pri prvom použití objektu v kóde a určí, aké hodnoty sa do objektu načítajú

K tejto čiastkovej rutine sa dostanete tak, že v prvom rozbaľovacom zozname vyberiete položku „Trieda“ a v druhej rozbaľovacej ponuke v okne modulu „Inicializovať“.

12345678910 Súkromná podtrieda_Initializácia ()Dim objItem As MyItemNastaviť položky = nová zbierkaPre n = 1 až 3Nastaviť objItem = New MyItemobjItem.Item = Pracovné listy ("List1"). Rozsah ("a" & n) .HodnotaobjItem.Detail = Pracovné listy ("List1"). Rozsah ("b" & n) .HodnotamItems.Add objItemĎalej nKoniec pod

Kód nastaví objekt s názvom „objItem“ pomocou definície „MyItem“, ktorú sme predtým vytvorili ako modul triedy.

Potom vytvorí novú kolekciu na základe predtým definovaného objektu „mItems“

Opakuje hodnoty uložené v hárku 1 zošita a vkladá ich do vlastností, ktoré sme vytvorili pre objekt „MyItem“. Všimnite si toho, že keď použijete „objitem“, zobrazí sa rozbaľovacia ponuka zobrazujúca tieto dve vlastnosti, presne ako keby ste používali vstavaný objekt programu Excel.

Objekt item je potom pridaný do objektu kolekcie, ktorý teraz obsahuje všetky údaje v hodnotách vlastností.

Vstupné údaje nemusia byť prevzaté z pracovného hárka. Môžu to byť statické hodnoty, alebo môžu pochádzať z pripojenia k databáze, ako je Microsoft Access alebo SQL Server, alebo môžu pochádzať z iného pracovného hárka.

Potom musíte pridať verejnú funkciu s názvom „Položka“

123 Položka verejnej funkcie (index ako celé číslo) ako položka položkyNastaviť položku = mItems.Item (index)Koncová funkcia

To vám umožní odkazovať na jednotlivé objekty v rámci zbierkového objektu podľa ich indexového čísla. Táto funkcia poskytuje „zrkadlo“ toho, čo sa deje v zbierke „mMyItems“ na pozadí.

Budete tiež musieť pridať vlastnosť s názvom „Počet“, aby váš kód mohol určiť, koľko objektov „MyItem“ sa nachádza v kolekcii „MyItems“, ak si to prajete opakovať.

123 Verejný majetok získajte počet () tak dlhoPočet = mItems.CountKoncová nehnuteľnosť

V tomto prípade potrebujete iba vlastnosť „Získať“, pretože je len na čítanie. Používa kolekciu mItems, pretože táto už má v sebe zabudovanú vlastnosť count.

Teraz máte objekt (MyItems) s úplnou hierarchiou definovanou objektom „MyItem“

Aby to celé fungovalo, musíte teraz vyplniť pracovný hárok (list1) údajmi, aby to rutina inicializácie triedy mohla zhromaždiť do objektu.

Vaša tabuľka by mala vyzerať takto:

Použitie vášho nového objektu

Teraz môžete svoj zbierkový objekt (MyItems) používať v štandardnom module Excel VBA. Zadajte nasledujúci kód:

12345678 Sub test_object ()Dim MyClass as New MyItems, n As IntegerMsgBox MyClass.CountPre n = 1 do MyClass.CountMsgBox MyClass.Item (n) .ItemMsgBox MyClass.Item (n) .DetailĎalej nKoniec pod

Tento kód vytvorí objekt s názvom „MyClass“ na základe objektu zbierky, ktorý ste vytvorili, s názvom „MyItems“. Spustí sa rutina „Inicializácia“, ktorá extrahuje všetky údaje z pracovného hárka do objektu.

Zobrazuje počet položiek v zbierke a potom sa opakuje v zbierke a zobrazuje text „Položka“ a „Detail“. Všimnite si, že keď sa v kóde odvoláte na objekt „MyClass“, zobrazí sa vám zoznam dvoch členských vlastností, ktoré pomáhajú pri pridávaní správnej vlastnosti.

Ak zmeníte hodnotu bunky vo vstupných údajoch v tabuľke, táto sa automaticky aktualizuje v kolekcii pri opätovnom spustení vyššie uvedeného kódu, pretože pri dimenzovaní objektu sa spustí inicializačná rutina a vyzdvihne všetky nové údaje.

Ak použijete slovo „Statický“ namiesto „Dim“, inicializačná rutina sa nespustí a staré hodnoty sa zachovajú, pokiaľ je kód nepretržite spustený. Ak sa údaje v tabuľke zmenia, v objekte sa to neprejaví

1234567 Vedľajší test_statický ()Statická trieda ako nové položky, n ako celé čísloPre n = 1 do Myclass.CountMsgBox Myclass.Item (n). ItemMsgBox Myclass.Item (n) .DetailĎalej nKoniec pod

Zhrnutie vytvárania objektu pomocou modulu triedy

Ako ste videli, vytvorenie hierarchie modulov triedy, ktoré sa majú použiť ako objekt, je dosť komplikovaná vec, dokonca aj pre takú jednoduchú štruktúru, ako je tu uvedený príklad. Rozsah chýb je obrovský!

Má však obrovské výhody v tom, že je váš kód elegantnejší a čitateľnejší. Je tiež jednoduchšie zdieľať ich s inými aplikáciami a vývojármi programu Excel tak, že ho zmeníte na doplnok.

V tomto prípade, ako vytvoriť objekt na uchovávanie údajov, by bolo normálnym prístupom vytvoriť viacrozmerné pole na uloženie viacstĺpcových tabuľkových údajov a napísali by ste riadok kódu na aktualizáciu alebo čítanie každého prvku v pole. To by pravdepodobne skončilo celkom chaoticky a pri riešení rôznych prvkov sa dajú ľahko urobiť chyby.

Pri vašom novom objekte môžete jednoducho naň odkazovať a na členy, ktoré ste vytvorili, na uloženie údajov.

Tiež, ak sa údaje zmenia v tabuľke (alebo v prepojenej databáze, ak ste to použili ako zdroj údajov vo svojom triedovom module), kedykoľvek použijete príkaz „Dim“, zavolá sa inicializačná rutina a údaje sa okamžite aktualizujú . Na opätovné naplnenie poľa nie je potrebné písať kód.

Použitie modulu triedy na vytvorenie variabilného úložiska

Pri písaní kódu VBA všade používate premenné, všetky s rôznym rozsahom. Niektoré môžu byť definované iba pre konkrétny postup, niektoré pre konkrétny modul a niektoré môžu byť globálnymi premennými, ktoré je možné použiť v celej aplikácii.

Môžete vytvoriť modul triedy, ktorý pojme veľký počet premenných, a pretože ide o objekt, je ho možné použiť kdekoľvek v kóde, dokonca aj vo formulári používateľa alebo v ovládacom prvku Active X, ktorý ste umiestnili na pracovný hárok.

Ďalšou výhodou je, že keď sa zmienite o svojom variabilnom objekte, zobrazí sa zoznam všetkých názvov premenných uložených v objekte zoradených vzostupne.

Ak chcete vytvoriť úložisko, musíte vložiť nový modul triedy. Vykonáte to pomocou príkazu Vložiť | Class Module z ponuky editora VB

Zmeňte názov na „MyVariables“ pomocou rovnakej metodiky, ako sme už diskutovali v tomto článku.

Zadajte nasledujúci kód:

12345678910111213141516 Súkromný mV ako variantVerejný majetok Získajte premennú1 () ako variantPremenná1 = mVKoncová nehnuteľnosťVerejný majetok Let Variable1 (ByVal vNewValue As Variant)mV = vNewValueKoncová nehnuteľnosťVerejný majetok Získajte premennú 2 () ako variantPremenná1 = mVKoncová nehnuteľnosťVerejný majetok Let Variable2 (ByVal vNewValue As Variant)mV = vNewValueKoncová nehnuteľnosť

Tento kód nastavuje vlastnosti „Nechaj“ a „Získať“ pre dve premenné („premenná1“ a „premenná2“). Vlastnosti Let and Get sú povinné pre každú z vašich premenných, aby sa dali čítať / zapisovať

V tomto kóde môžete namiesto vzorových premenných použiť svoje vlastné názvy a môžete pridať ďalšie premenné a uistiť sa, že každá nová premenná má príkaz „Let“ a „Get“.

Súkromné ​​vyhlásenie premennej „mV“ má vytvoriť pracovnú premennú, ktorá sa používa iba v rámci modulu triedy na prenos hodnôt.

Ak chcete použiť archív premenných, zadajte do štandardného modulu nasledujúci kód:

123456 Globálne VarRepo ako nové moje premennéSub TestVariableRepository ()MsgBox VarRepo.Variable1VarRepo.Variable1 = 10MsgBox VarRepo.Variable1Koniec pod

Tento kód vytvorí globálnu inštanciu vášho objektu „MyVariables“, ktorý ste vytvorili. Toto vyhlásenie musíte urobiť iba raz z ľubovoľného miesta v kóde.

Kód najskôr zobrazí hodnotu „Premenná1“, aby ukázal, že je prázdny.

„Premennej1“ je priradená hodnota 10 a nová hodnota v objekte sa potom zobrazí, aby sa ukázalo, že táto vlastnosť teraz drží túto hodnotu.

Pretože inštancia objektu „MyVariables“ bola definovaná globálne, na ľubovoľné z definovaných premenných v objekte sa môžete odvolávať odkiaľkoľvek z kódu.

To má obrovskú výhodu v tom, že ak chcete použiť svoje premenné kdekoľvek v kóde, stačí definovať jednu globálnu premennú a z tohto dôvodu je možné ku všetkým premenným voľne pristupovať a upravovať ich v celom kóde.

Premeňte svoj objekt na doplnok

Kód na vytvorenie objektu je zatiaľ vo vašej aplikácii zošita. Ak však chcete byť schopní zdieľať svoj objekt s inými vývojármi alebo v iných vlastných aplikáciách programu Excel, môžete z neho urobiť doplnok

Na tento účel stačí uložiť súbor ako doplnok. Vyberte položku Súbor | Uložiť ako a zobrazí sa okno prehliadača

V rozbaľovacej ponuke vyberte typ súboru ako doplnok (.xlam) a kliknite na tlačidlo OK. Súbor bude predvolene uložený do priečinka Doplnky, ale umiestnenie môžete zmeniť.

Potom môžete súbor doplnku začleniť do svojich aplikácií Excel, čo vám poskytne flexibilitu pri používaní nového objektu

Ak chcete zahrnúť nový doplnok do programu Excel, kliknite na položku Súbor na páse s nástrojmi programu Excel a potom kliknite na položku Možnosti v spodnej časti ľavej tably.

V rozbaľovacom okne, ktoré sa zobrazí, kliknite na ľavom paneli na položku „Doplnky“. V spodnej časti okna je tlačidlo označené „Prejsť“

Kliknite na toto a zobrazí sa vyskakovacie okno „Doplnok“. Kliknite na „Prehľadávať“ a potom vyhľadajte svoj súbor doplnku. Potom sa budete môcť vo svojom kóde odkazovať na svoj objekt.

Vám pomôže rozvoju miesta, zdieľať stránku s priateľmi

wave wave wave wave wave