Vadnica in primeri modula razreda VBA

Ta vadnica vas bo naučila o modulih razredov v VBA. Izvedeli boste, kaj so in kako jih uporabljati.

Moduli razreda VBA - Uvod

Ko vnesete module v urejevalnik Visual Basic (VBE), da vnesete svojo kodo, ste morda opazili, da lahko vstavite tudi tisto, kar se imenuje "Modul razreda".

Moduli razreda proti modulom

Moduli razreda delujejo na zelo drugačen način kot običajni moduli, saj olajšajo ustvarjanje sestavnega modela predmeta (COM), ki ga lahko nato uporabite v svoji običajni kodi VBA

Učinkovito ustvarite predmet, ki deluje na enak način kot vgrajen predmet Excel, na primer "Delovni listi". V objektu delovnih listov imate številne lastnosti in metode, ki vam omogočajo, da dobite število delovnih listov v delovnem zvezku ali vsako posamezno ime delovnega lista ali številne druge informacije

Ko na ta način ustvarite nov predmet, ustvarite gradnik, ki ga lahko uporabite kjer koli v VBA. Objekt ima številne lastnosti in metode, do katerih lahko koda VBA dostopa od koder koli v delovnem zvezku, ne da bi morali kodo znova pisati.

Poleg sklicevanja na vaš novi objekt iz standardnega modula VBA ga lahko uporabite tudi v kodi za uporabniški obrazec, ki je del vaše aplikacije po meri

Uporabite ga lahko tudi tam, kjer ste kontrolnike Active X postavili na delovni list, na primer ukazni gumb ali spustni meni. Vsi ti kontrolniki uporabljajo VBA, vaš novi predmet pa lahko preprosto vključite v kodo dogodka za te kontrole.

Predmet lahko spremenite tudi v dodatek Excel. Vaš predmet bo samodejno na voljo drugim uporabnikom, ki imajo naložen ta dodatek. To dodaja vašo večstopenjsko arhitekturo vaši aplikaciji Excel

Excel je večstopenjska aplikacija. Obstaja sloj storitev za odjemalce, ki poganja dejansko okno delovnega lista, ki ga uporabnik pozna. Predmetni model Excel je naslednji sloj pod njim. Pritisnite F2 v modulu VBA in videli boste ogromno predmetov in članov tistih predmetov, ki so motor Excela. Upoštevajte, da bo tukaj prikazan tudi vaš novi predmet.

Končno pod vsem tem imate plast podatkovnih storitev, ki vsebuje vse podatke, ki ste jih vnesli v delovne liste in celice. Excel do tega dostopa z modelom Excel Object.

Ustvarjanje modula razreda vam omogoča razširitev Excelovega objektnega modula z lastnimi predmeti in člani po meri

Ta članek vam razlaga, kako z moduli razredov ustvarite preprosto hierarhijo predmetov.

Prednosti uporabe modulov razreda

  1. Lahko razvijete robusten gradnik, ki ga lahko uporabite v poljubnem številu različnih aplikacij Excel
  2. Ko je ta temeljito preizkušen, se lahko zanesete, da bo vedno dal pravilne rezultate na enak način kot vgrajeni predmeti Excel
  3. Če posodobite kodo drugje v aplikaciji, bo novi objekt še naprej deloval na enak način
  4. Novi dodatek lahko uporabite kot dodatek v drugih aplikacijah Excel
  5. Predmete je mogoče znova uporabiti v drugih aplikacijah in pomaga pri odpravljanju napak

Slabosti uporabe modulov razreda

  1. Težko jih je ustvariti in razumeti.
  2. Dogovori o poimenovanju so zelo pomembni, saj boste to videli, ko boste svoj predmet uporabljali v običajnem modulu.
  3. Če modula razreda še niste ustvarili, jih je težko razumeti in obstaja strma krivulja učenja
  4. Med izvajanjem ni mogoče spreminjati-projekt morate znova nastaviti.
  5. Če imajo lastnosti in zasebne spremenljivke isto ime, lahko pride do neskončnih zank, ki povzročijo napake

Vstavljanje modula razreda

Izberite Vstavi | Modul razreda iz menija VBE (urejevalnik Visual Basic). Novi modul razreda se bo samodejno imenoval "razred 1", vendar ga je treba takoj spremeniti v ime, ki ga boste uporabili za svoj predmet

Ime spremenite v oknu Lastnosti, kamor puščica kaže. Preprosto vnesete svoje novo ime in to se bo spremenilo v zbirki modulov razredov

Če okno Lastnosti ni vidno, izberite Pogled | Lastnosti v meniju VBE ali pritisnite F4

Pokličite svoj novi modul razreda 'MyItem' in dvokliknite ime v drevesnem pogledu v Raziskovalcu, da prikažete okno kode zanj.

Ustvarjanje predmeta predmeta

V tem primeru bo ustvarjen objekt najvišje ravni z imenom »Moji elementi«, pod njim pa je članski predmet, imenovan »Moj element«, ki bo vseboval posamezne podatke za vsak element. Ko je ustvarjen, bo deloval na enak način kot vgrajen objekt Excel. Na primer, obstaja predmet, imenovan "Delovni listi", ki je zbirka vsakega delovnega lista v vašem delovnem zvezku. Obstaja tudi predmet z imenom "List", ki predstavlja vsak posamezen delovni list v vašem delovnem zvezku in vsebuje vse lastnosti in metode za vsak delovni list. Ta predmet se nanaša na predmet zbiranja "Delovni listi".

Lahko se pomikate po zbirki "Delovni listi" in si ogledate vsak "List" po vrsti. Na enak način boste lahko ponavljali zbirko »Moji elementi« in si ogledali lastnosti, ki ste jih ustvarili v članu »Myitem«.

Prva stvar, ki jo morate storiti, je ustvariti pod-objekt za raven članov, ki bo vseboval dejanske postavke v zbirki predmeta najvišje ravni. To je enakovredno članom (npr. Ime, vidno, število) v objektu "List" v Excelu. Ta koda je vnesena v modul razreda, imenovan 'MyItem'

Moduli razreda imajo lastnosti in metode. Lastnosti so dejansko podobne spremenljivkam, saj vsebujejo vrednosti podatkov kot spremenljivke, metode pa so podobne podprogramom ali funkcijam.

V pod -objektu bomo ustvarili dve lastnosti za predmet - Item in Detail

Sprva je treba deklarirati dve spremenljivki niza, ki vsebujeta vrednosti lastnosti:

12 Zasebni predmet kot nizZasebno mDetail As String

Te je treba navesti v razdelku Izjave na vrhu kode za modul razreda, tako da jih je mogoče uporabiti v vseh podprogramih v celotnem modulu

Imeti morajo edinstvena imena, da se razlikujejo od lastnosti, ki jih bomo ustvarili, zato je pred vsakim imenom postavljen znak 'm' (za člana).

Spremenljivke so deklarirane kot zasebne, zato jih nihče, ki uporablja predmet, ne more videti. So delovne spremenljivke za uporabo v kodi objekta in niso tam kot del končnega predmeta.

Naslednji korak je nastavitev kode za dostop do obeh lastnosti. To naredite s pomočjo izjave Property Let in Property Get za vsako nepremičnino. Ti morajo biti javni, sicer objekt najvišje ravni ne bo imel vidnih lastnosti

123456789101112131415 Element za javno lastnino (vdata kot niz)mItem = vdataKončna lastninaJavna lastnina Pridobite element () kot nizPostavka = mItemKončna lastninaPublic Property Let Detail (vdata As String)mDetail = vdataKončna lastninaPublic Property Get Detail () As StringPodrobnosti = mDetailKončna lastnina

Ta koda ustvarja sredstva za branje in pisanje vrednosti v obe lastnosti (postavko in podrobnost) z uporabo dveh zasebnih spremenljivk, ki sta bili definirani v razdelku deklaracij modula.

Parameter „vdata“ se uporablja za posredovanje podatkov zadevni lastnosti.

Pomembno je, da ima vsaka lastnost izjave 'Let' in 'Get' in da je ime lastnosti v vsakem primeru enako. Če ste napačno črkovani, bi lahko imeli dve različni lastnosti - eno, iz katere lahko berete, in drugo, v katero lahko pišete!

Pri ustvarjanju te kode lahko uporabite Vstavi | Postopek v meniju VBE za ustvarjanje okostja kode, ki bo ustvaril začetno kodo za lastnosti »Get« in »Let« za dano ime lastnosti

Odpre se pojavno okno, v katerega vnesete ime nepremičnine in na izbirnih gumbih izberete »Lastnost«:

Kliknite »V redu« in koda okostja bo dodana v modul razreda:

1234567 Javna lastnina Pridobite MyProperty () kot variantoKončna lastninaJavna lastnina pusti MyProperty (ByVal vNewValue kot različica)Končna lastnina

To preprečuje napake pri imenih nepremičnin. Kodo preprosto dodate med izjavi „Javna lastnina“ in „Končna lastnina“.

Zdaj imate predmet z imenom 'MyItem', ki bo vseboval vse podatke za to vajo.

Utrujen od iskanja primerov kode VBA? Preizkusite AutoMacro!

Ustvarjanje zbirke

Naslednja stopnja je ustvarjanje predmeta najvišje ravni kot predmeta Zbirke za dostop do lastnosti, ki ste jih nastavili v predmetu »Moj element«

Ponovno morate definirati delovni objekt, ki bo deloval kot objekt zbiranja na enak način, kot ste definirali dve spremenljivki niza v objektu 'MyItem'.

1 Zasebni predmeti kot zbirka

Še enkrat, to mora imeti edinstveno ime, zato je pred imenom "m" (objekt član), razglašeno pa je tudi kot "Zasebno", tako da se ne prikaže, ko je nov predmet rabljeno

Nato morate vnesti kodo Class_Initialize. To se izvede, ko prvič uporabite objekt v kodi, in določi, katere vrednosti bodo naložene v objekt

Do te podprograma lahko dostopate tako, da v prvem spustnem meniju izberete »Razred« in v drugem spustnem meniju okna modula »Inicializiraj«

12345678910 Zasebni podrazred_Initialize ()Zatemni objItem kot MyItemSet mItems = Nova zbirkaZa n = 1 do 3Nastavi objItem = Nov MyItemobjItem.Item = Delovni listi ("List1"). Obseg ("a" & n). VrednostobjItem.Detail = Delovni listi ("List1"). Obseg ("b" & n). VrednostmItems.Add objItemNaprej nEnd Sub

Koda nastavi objekt, imenovan 'objItem', z uporabo definicije 'MyItem', ki smo jo prej zgradili kot modul razreda.

Nato ustvari novo zbirko na podlagi prej opredeljenega predmeta „mItems“

Ponavlja skozi vrednosti, ki so na Sheet1 delovnega zvezka, in jih postavlja v lastnosti, ki smo jih ustvarili za objekt »MyItem«. Upoštevajte, da se pri uporabi »objitem« prikaže spustni meni, ki prikazuje obe lastnosti, tako kot če bi uporabljali vgrajen objekt Excel.

Predmet predmeta se nato doda v objekt zbiranja, ki zdaj vsebuje vse podatke v vrednostih lastnosti.

Vhodnih podatkov ni treba vzeti z delovnega lista. Lahko so statične vrednosti ali pa izhajajo iz povezave z bazo podatkov, kot sta Microsoft Access ali SQL Server, ali pa iz drugega delovnega lista.

Nato morate dodati javno funkcijo, imenovano "Element"

123 Element javne funkcije (indeks kot celo število) kot MyItemSet Item = mItems.Item (indeks)Končana funkcija

To vam omogoča, da se na posamezne objekte v objektu zbirke sklicujete po njihovi indeksni številki. Ta funkcija ponuja "ogledalo" dogajanja v zbirki "mMyItems" v ozadju.

Dodati boste morali tudi lastnost, imenovano "Count", tako da lahko vaša koda ugotovi, koliko predmetov "MyItem" je v zbirki "MyItems", če jo želite ponoviti.

123 Javna lastnina Get Count () As LongCount = mItems.CountKončna lastnina

V tem primeru potrebujete samo lastnost »Pridobi«, ker je samo za branje. Uporablja zbirko mItems, ker ima že vgrajeno lastnost count.

Zdaj imate objekt (MyItems) s celotno hierarhijo, ki jo definira objekt 'MyItem'

Če želite, da bo vse skupaj delovalo, morate zdaj izpolniti delovni list (Sheet1) s podatki, tako da lahko rutina Initialize Class to zbere v objekt

Vaša preglednica bi morala izgledati tako:

Uporaba vašega novega predmeta

Zdaj lahko svoj predmet Zbirka (MyItems) uporabljate v standardnem modulu Excel VBA. Vnesite naslednjo kodo:

12345678 Sub test_object ()Zatemni MyClass kot nove moje elemente, n kot celo številoMsgBox MyClass.CountZa n = 1 Za MyClass.CountMsgBox MyClass.Item (n) .ItemMsgBox MyClass.Item (n) .DetailNaprej nEnd Sub

Ta koda ustvari predmet, imenovan "MyClass", na podlagi predmeta zbirke, ki ste ga ustvarili, imenovanega "MyItems". Ta sproži rutino 'Initialize', ki izvleče vse podatke z delovnega lista v objekt.

Prikaže število elementov v zbirki, nato pa po zbirki prikazuje besedilo "Postavka" in "Podrobnosti". Opazili boste, da ko se v svoji kodi sklicujete na objekt 'MyClass', boste videli seznam dveh lastnosti članov, ki pomaga pri dodajanju pravilne lastnosti.

Če spremenite vrednost celice v vhodnih podatkih v preglednici, se bo ta samodejno posodobila v zbirki, ko znova zaženete zgornjo kodo, saj se pri dimenzioniranju predmeta zažene rutina inicializira in pobere vse nove podatke

Če namesto "Dim" uporabite besedo "Static", se začetna rutina ne zažene in stare vrednosti se hranijo, dokler se koda neprekinjeno izvaja. Če se podatki v preglednici spremenijo, se to v objektu ne bo odrazilo

1234567 Sub Test_Static ()Statični miklas kot novi moji predmeti, n kot celo številoZa n = 1 do Myclass.CountMsgBox Myclass.Item (n) .ItemMsgBox Myclass.Item (n) .DetailNaprej nEnd Sub

Povzetek ustvarjanja predmeta z modulom razreda

Kot ste videli, je ustvarjanje hierarhije modulov razredov za uporabo kot predmet precej zapleten posel, tudi za tako preprosto strukturo, kot je naveden tukaj. Možnosti za napake so ogromne!

Vendar pa ima velike prednosti, da naredi vašo kodo elegantnejšo in lažjo za branje. Prav tako ga je lažje deliti z drugimi aplikacijami in razvijalci programa Excel, tako da ga spremenite v dodatek.

V tem primeru, kako ustvariti objekt za shranjevanje podatkov, bi bil običajen pristop ustvariti večdimenzionalno matriko za shranjevanje podatkov v preglednicah z več stolpci in napisali bi vrstico kode za posodobitev ali branje vsakega elementa v matriko. To bi se verjetno končalo precej grdo in pri obravnavanju različnih elementov bi lahko zlahka prišlo do napak.

Z novim objektom se lahko preprosto sklicujete nanj in člane, ki ste jih ustvarili pod njim, da hranijo podatke.

Tudi če se podatki spremenijo v preglednici (ali v povezani zbirki podatkov, če ste to uporabili kot vir podatkov v svojem modulu razreda), vsakič, ko uporabite stavek 'Dim', se pokliče inicializacijska rutina in podatki bodo takoj posodobljeni . Za ponovno napolnitev matrike ni treba pisati kode.

Uporaba modula razreda za ustvarjanje spremenljivke

Ko pišete kodo VBA, uporabljate spremenljivke povsod, vse z različnimi področji uporabe. Nekatere je mogoče opredeliti le za določen postopek, nekatere za določen modul, nekatere pa so lahko globalne spremenljivke, ki jih je mogoče uporabiti po vsej aplikaciji

Ustvarite lahko modul razreda, ki bo vseboval veliko število spremenljivk, in ker je predmet, ga lahko uporabite kjer koli v kodi, tudi na uporabniškem obrazcu ali v kontrolniku Active X, ki ste ga postavili na delovni list.

Dodatna prednost je, da ko se sklicujete na svoj spremenljiv objekt, boste videli seznam vseh imen spremenljivk v objektu, razvrščenih po naraščajočem vrstnem redu.

Če želite ustvariti skladišče, morate vstaviti nov modul razreda. To naredite z uporabo Insert | Modul razreda iz menija VB Editor

Spremenite ime v »Moje spremenljivke« z uporabo iste metodologije, kot je bilo opisano v tem članku.

Vnesite naslednjo kodo:

12345678910111213141516 Zasebni mV kot variantaJavna lastnina Pridobite spremenljivko1 () kot variantoSpremenljivka1 = mVKončna lastninaJavna lastnina Naj spremenljivka 1 (ByVal vNewValue kot varianta)mV = vNova vrednostKončna lastninaJavna lastnina Pridobite spremenljivko2 () kot variantoSpremenljivka1 = mVKončna lastninaJavna lastnina naj spremenljivka2 (ByVal vNewValue kot varianta)mV = vNova vrednostKončna lastnina

Ta koda nastavi lastnosti "Let" in "Get" za dve spremenljivki ("Variable1" in "Variable2"). Lastnosti Let and Get so potrebne za vsako od vaših spremenljivk, tako da jih lahko berete / pišete

Za spremenljivke lahko uporabite svoja imena namesto vzorčnih v tej kodi, lahko pa dodate še dodatne spremenljivke, pri čemer pazite, da ima vsaka nova spremenljivka izjave "Let" in "Get".

Zasebna deklaracija spremenljivke "mV" je ustvariti delujočo spremenljivko, ki se v modulu razreda uporablja samo za prenos vrednosti.

Če želite uporabiti spremenljivko, v standardni modul vnesite naslednjo kodo:

123456 Global VarRepo kot nove MyVariablesPod TestVariableRepository ()MsgBox VarRepo.Variable1VarRepo.Variable1 = 10MsgBox VarRepo.Variable1End Sub

Ta koda ustvari globalni primerek vašega predmeta »MyVariables«, ki ste ga ustvarili. To izjavo morate narediti le enkrat od koder koli v kodi.

Koda najprej prikaže vrednost "spremenljivke1", da pokaže, da je prazna.

»Spremenljivki1« je dodeljena vrednost 10, nato pa se prikaže nova vrednost v objektu, ki pokaže, da ima ta lastnost zdaj to vrednost.

Ker je bil primerek predmeta „MyVariables“ definiran globalno, se lahko sklicujete na katero koli od definiranih spremenljivk v objektu od koder koli v svoji kodi.

To ima veliko prednost v tem, da če želite svoje spremenljivke uporabiti kjer koli v kodi, morate definirati samo eno globalno spremenljivko, od tega primera pa lahko do vseh spremenljivk prosto dostopate in jih spreminjate v svoji kodi.

Pretvarjanje vašega predmeta v dodatek

Doslej je koda za ustvarjanje predmeta v vaši aplikaciji delovnega zvezka. Če pa želite svoj predmet dati v skupno rabo z drugimi razvijalci ali v drugih lastnih Excelovih aplikacijah, ga lahko spremenite v dodatek

Če želite to narediti, morate datoteko shraniti kot dodatek. Izberite Datoteka | Shrani kot in prikazalo se bo okno brskalnika

V spustnem meniju vrste datoteke izberite vrsto datoteke kot dodatek (.xlam) in kliknite V redu. Datoteka bo privzeto shranjena v mapo z dodatki, lahko pa spremenite lokacijo.

Nato lahko datoteko dodatka vključite v svoje Excelove aplikacije, kar vam daje prožnost pri uporabi novega predmeta

Če želite dodati nov dodatek v Excel, kliknite Datoteka na Excelovem traku in nato kliknite Možnosti na dnu levega podokna

V levem podoknu v pojavnem oknu, ki se prikaže, kliknite »Dodatki«. Na dnu okna je gumb z oznako »Pojdi«

Kliknite na to in pojavilo se bo pojavno okno »Dodatek«. Kliknite »Prebrskaj« in nato poiščite datoteko dodatka. Nato se boste lahko v kodi sklicevali na svoj predmet.

Vam bo pomagal razvoj spletnega mesta, ki si delijo stran s svojimi prijatelji

wave wave wave wave wave