AaVBA - Nema BB

Ovaj vodič će vas naučiti o modulima razreda u VBA -i. Naučit ćete što su oni i kako ih koristiti.

Moduli VBA klase - Uvod

Kada umetnete module u Visual Basic Editor (VBE) kako biste unijeli svoj kôd, možda ste primijetili da možete umetnuti i ono što se naziva 'Modul klase'.

Moduli klase vs moduli

Moduli klase rade na vrlo različit način od običnih modula jer olakšavaju stvaranje Component Object Model (COM) koji se tada može koristiti unutar vašeg uobičajenog VBA koda

Ustvari, stvarate objekt koji radi na isti način kao i ugrađeni Excel objekt, poput "Radnih listova". U objektu Radni listovi imate niz svojstava i metoda koji vam omogućuju da unesete broj radnih listova u radnu knjigu ili svaki pojedinačni naziv radnog lista ili brojne druge informacije

Kada na ovaj način kreirate novi Objekt, stvarate građevinski blok koji se može koristiti bilo gdje unutar VBA. Objekt ima niz svojstava i metoda kojima se može pristupiti pomoću VBA koda s bilo kojeg mjesta u radnoj knjizi, bez potrebe za ponovnim pisanjem koda.

Osim upućivanja na vaš novi objekt iz standardnog VBA modula, možete ga koristiti i u kodu iza UserForma koji je dio vaše prilagođene aplikacije

Možete ga koristiti i tamo gdje ste Active X kontrole postavili na radni list, poput naredbenog gumba ili padajućeg izbornika. Sve ove kontrole koriste VBA, a vaš novi objekt lako se može ugraditi u kôd događaja za te kontrole.

Također možete pretvoriti svoj objekt u dodatak za Excel. Vaš će objekt automatski biti dostupan drugim korisnicima koji imaju učitan taj dodatak. Ovo dodaje vlastitu višeslojnu arhitekturu u vašu Excel aplikaciju

Excel je višeslojna aplikacija. Postoji sloj usluga klijenta koji pokreće stvarni prozor radnog lista s kojim je korisnik upoznat. Excel objektni model sljedeći je sloj ispod. Pritisnite F2 u VBA modulu i moći ćete vidjeti ogroman broj objekata i članova tih objekata koji su motor Excela. Imajte na umu da će se vaš novi objekt također prikazati ovdje.

Konačno, ispod svega ovoga imate sloj podatkovnih usluga koji sadrži sve podatke koje ste unijeli u radne listove i ćelije. Excel tome pristupa pomoću Excelovog modela objekta.

Stvaranje modula klase omogućuje vam proširenje modula Excel objekta vlastitim prilagođenim objektima i članovima

Ovaj vam članak objašnjava kako stvoriti jednostavnu hijerarhiju objekata pomoću modula klase.

Prednosti korištenja modula klase

  1. Možete razviti robustan građevni blok koji se može koristiti u bilo kojem broju različitih Excel programa
  2. Nakon što je temeljito testiran, možete se osloniti na to da će uvijek dati točne rezultate na isti način kao i ugrađeni Excel objekti
  3. Ako se ažuriraju kodovi na drugom mjestu u aplikaciji, novi objekt će i dalje raditi na isti način
  4. Svoj novi objekt možete koristiti u drugim Excel programima kao dodatak
  5. Objekti se mogu ponovno koristiti u drugim aplikacijama i pomažu u ispravljanju pogrešaka

Nedostaci korištenja modula klase

  1. Može ih biti teško stvoriti i razumjeti.
  2. Konvencije imenovanja vrlo su važne jer ćete to vidjeti kada koristite svoj objekt u normalnom modulu.
  3. Ako prije niste stvorili modul razreda, može ih biti teško razumjeti i postoji strma krivulja učenja
  4. Nemoguće je promijeniti tijekom izvođenja-morate ponovno postaviti projekt.
  5. Ako svojstva i privatne varijable imaju isti naziv, tada se mogu pojaviti beskonačne petlje koje rezultiraju pogreškama

Umetanje modula klase

Odaberite Umetni | Modul razreda iz izbornika VBE (Visual Basic Editor). Novi modul klase automatski će se zvati "Klasa 1", no to je potrebno odmah promijeniti u naziv koji ćete koristiti za svoj objekt

Mijenjate naziv u prozoru Svojstva gdje je strelica usmjerena. Jednostavno upišete svoje novo ime, a to će se promijeniti u zbirci Moduli razreda

Ako prozor Svojstva nije vidljiv, odaberite Pogled | Svojstva na VBE izborniku ili pritisnite F4

Pozovite svoj novi modul klase 'MyItem' i dvaput kliknite naziv u prikazu stabla u Project Exploreru da biste prikazali prozor koda za njega.

Stvaranje objektne stavke

Ovaj primjer će stvoriti objekt najviše razine pod nazivom „Moje stavke“ s članskim objektom ispod njega pod nazivom „Moja stavka“ koji će sadržavati pojedinačne podatke za svaku stavku. Nakon stvaranja radit će na isti način kao i ugrađeni Excel objekt. Na primjer, postoji objekt pod nazivom "Radni listovi" koji je zbirka svakog radnog lista u vašoj radnoj knjizi. Postoji i objekt zvan "List" koji predstavlja svaki pojedinačni radni list u vašoj radnoj knjizi i sadrži sva svojstva i metode za svaki radni list. Ovaj objekt se odnosi na objekt prikupljanja "Radni listovi".

Možete ponavljati zbirku "Radni listovi", pregledavajući svaki "List" redom. Na isti ćete način moći ponoviti zbirku ‘MyItems’ pregledavajući svojstva koja ste stvorili u članu ‘Myitem’.

Prvo što trebate učiniti je stvoriti pod objekt za razinu člana koji će sadržavati stvarne stavke unutar zbirke objekta najviše razine. Ovo je ekvivalent članova (npr. Imena, vidljivih, broja) unutar objekta "List" u Excelu. Ovaj kôd se unosi u modul klase pod nazivom "MyItem"

Moduli razreda imaju svojstva i metode. Svojstva su zapravo poput varijabli, jer sadrže vrijednosti podataka poput varijabli, a metode su poput potprograma ili funkcija.

U podobjektu ćemo stvoriti dva svojstva za objekt - Item i Detail

U početku je potrebno deklarirati dvije varijable niza koje drže vrijednosti svojstava:

12 Privatni predmet kao nizPrivatni mDetail As String

Oni moraju biti deklarirani u odjeljku Deklaracije pri vrhu koda za modul klase, tako da se mogu koristiti u svim potprogramima u cijelom modulu

Moraju im dati jedinstvena imena kako bi se razlikovali od svojstava koja ćemo stvoriti, pa je ispred svakog imena stavljen znak 'm' (za člana).

Varijable su deklarirane kao privatne pa ih nitko ne može vidjeti pomoću objekta. Oni su radne varijable za upotrebu u objektnom kodu i ne postoje kao dio konačnog objekta.

Sljedeći korak je postavljanje koda za pristup dvama svojstvima. To činite pomoću izraza Property Let i Property Get za svako svojstvo. Oni moraju biti javni jer inače objekt najviše razine neće imati vidljiva svojstva

123456789101112131415 Stavka javne imovine u vlasništvu (vdata kao niz)mItem = vdataKraj imovineJavna svojina Nabavite stavku () kao nizStavka = mItemKraj imovineJavno vlasništvo neka se iscrta (vdata kao niz)mDetail = vdataKraj imovineJavno vlasništvo Get Detail () As StringDetalj = mDetailKraj imovine

Ovaj kôd stvara sredstva za čitanje i pisanje vrijednosti u dva svojstva (Item i Detail) koristeći dvije privatne varijable koje su definirane u odjeljku deklaracija modula.

Parametar "vdata" koristi se za prosljeđivanje podataka dotičnoj nekretnini.

Važno je da svako svojstvo ima naredbe "Dopusti" i "Dohvati" te da je naziv svojstva u svakom slučaju isti. Ako ste pogrešno napisali, mogli biste imati dva različita svojstva - jedno iz kojeg možete čitati i jedno u koje možete pisati!

Za pomoć pri stvaranju ovog koda možete koristiti Insert | Postupak na VBE izborniku za stvaranje kostura koda koji će stvoriti početni kod za svojstva "Get" i "Let" za dati naziv svojstva

Ovo će prikazati skočni prozor u koji upisujete naziv nekretnine i na izbornim gumbima odaberite "Svojstvo":

Kliknite "U redu" i kostur koda bit će dodan u modul klase:

1234567 Javno vlasništvo Nabavite MyProperty () kao varijantuKraj imovineJavno svojstvo Neka MyProperty (ByVal vNewValue kao varijanta)Kraj imovine

Time se sprječavaju greške u nazivima nekretnina. Jednostavno dodajte svoj kod između izjava "Javno vlasništvo" i "Kraj vlasništva".

Sada imate objekt pod nazivom 'MyItem' koji će sadržavati sve podatke za ovu vježbu.

Umorni ste od traženja primjera VBA koda? Isprobajte AutoMacro!

Stvaranje zbirke

Sljedeća je faza stvaranje objekta najviše razine kao objekta zbirke za pristup svojstvima koja ste postavili u objektu ‘MyItem’

Opet morate definirati radni objekt koji će djelovati kao objekt prikupljanja na isti način na koji ste definirali dvije varijable niza u objektu 'MyItem'.

1 Privatne stavke kao zbirka

Opet, ovo mora imati jedinstveni naziv, zbog čega se ispred imena nalazi 'm' (objekt član), a također je deklarirano i kao 'Privatno', tako da se ne pojavljuje prilikom postavljanja novog objekta rabljeno

Zatim morate popuniti kôd Class_Initialize. To se izvodi kada prvi put koristite objekt unutar koda i određuje koje će se vrijednosti učitati u objekt

Ovoj podrutini možete pristupiti odabirom ‘Class’ u prvom padajućem izborniku i ‘Initialize’ u drugom padajućem izborniku prozora modula

12345678910 Privatna podrazreda_Initialize ()Priguši objItem kao MyItemPostavite stavke = Nova zbirkaZa n = 1 do 3Postavi objItem = Nova MyItemobjItem.Item = Radni listovi ("List1"). Raspon ("a" & n). VrijednostobjItem.Detail = Radni listovi ("List1"). Raspon ("b" & n). VrijednostmItems.Add objItemDalje nKraj podm

Kôd postavlja objekt nazvan 'objItem' koristeći definiciju 'MyItem' koju smo ranije izgradili kao modul klase.

Zatim stvara novu zbirku na temelju ranije definiranog objekta 'mItems'

Ponavlja vrijednosti koje se nalaze na Sheet1 radne knjige i stavlja ih u svojstva koja smo stvorili za objekt 'MyItem'. Imajte na umu da kada koristite "objitem", pojavit će se padajući izbornik koji prikazuje dva svojstva, točno kao da koristite ugrađeni Excel objekt.

Objekt stavke tada se dodaje u objekt zbirke koji sada sadrži sve podatke u vrijednostima svojstva.

Ulazni podaci ne moraju se uzimati s radnog lista. To mogu biti statičke vrijednosti, ili mogu doći iz veze s bazom podataka kao što je Microsoft Access ili SQL Server, ili mogu doći s drugog radnog lista.

Zatim morate dodati javnu funkciju pod nazivom "Stavka"

123 Stavka javne funkcije (indeks kao cijeli broj) Kao MyItemPostavite stavku = mItems.Item (indeks)Završna funkcija

To vam omogućuje da se pozivate na pojedinačne objekte unutar objekta zbirke prema njihovom indeksnom broju. Ova funkcija pruža "zrcalo" onoga što se događa u zbirci "mMyItems" u pozadini.

Također ćete morati dodati svojstvo pod nazivom 'Count' kako bi vaš kôd mogao utvrditi koliko objekata 'MyItem' ima u zbirci 'MyItems', ako želite to ponoviti.

123 Javna svojina Get Count () As LongCount = mItems.CountKraj imovine

U ovom slučaju trebate samo svojstvo "Get" jer je samo za čitanje. Koristi zbirku mItems jer to već ima svojstvo count ugrađeno u nju.

Sada imate objekt (MyItems) s potpunom hijerarhijom definiranom objektom 'MyItem'

Da bi cijela stvar funkcionirala, sada morate popuniti radni list (Sheet1) podacima tako da rutina Initialize Class može to prikupiti u objekt

Vaša proračunska tablica trebala bi izgledati ovako:

Korištenje vašeg novog objekta

Sada možete koristiti objekt Zbirka (Moje stavke) unutar standardnog Excel VBA modula. Unesite sljedeći kôd:

12345678 Sub test_object ()Zatamni MyClass kao nove stavke, n kao cijeli brojMsgBox MyClass.CountZa n = 1 Za MyClass.CountMsgBox MyClass.Item (n) .ItemMsgBox MyClass.Item (n) .DetaljDalje nKraj podm

Ovaj kôd stvara objekt pod nazivom "MyClass" na temelju objekta zbirke koji ste stvorili pod nazivom "MyItems". Ovo aktiviranje rutine 'Initialize' koja ekstrahira sve podatke s radnog lista u objekt.

Prikazuje broj stavki u zbirci, a zatim se ponavlja kroz zbirku prikazujući tekst "Stavka" i "Pojedinosti". Primijetit ćete da ćete, kada u svom kodu upućujete na objekt ‘MyClass’, vidjeti popis dva svojstva člana koji pomažu u dodavanju ispravnog svojstva.

Ako promijenite vrijednost ćelije u ulaznim podacima u proračunskoj tablici, ona će se automatski ažurirati u zbirci kada ponovno pokrenete gornji kôd, jer kada dimenzionirate objekt, rutina inicijalizacije pokreće se i preuzima sve nove podatke

Ako umjesto riječi "Dim" koristite riječ "Static", inicijalizacija se ne pokreće i stare se vrijednosti čuvaju, sve dok se kôd neprestano izvodi. Ako se podaci u proračunskoj tablici promijene, to se neće odraziti u objektu

1234567 Pod Test_Static ()Statička miklasa kao nove stavke, n kao cijeli brojZa n = 1 Za Myclass.CountMsgBox Myclass.Item (n) .ItemMsgBox Myclass.Item (n) .DetaljDalje nKraj podm

Sažetak stvaranja objekta pomoću modula klase

Kao što ste vidjeli, stvaranje hijerarhije modula klase za korištenje kao objekt prilično je kompliciran posao, čak i za strukturu tako jednostavnu kao što je ovdje navedeni primjer. Opseg griješenja je ogroman!

Međutim, ima velike prednosti što vaš kod čini elegantnijim i lakšim za čitanje. Također je lakše dijeliti s drugim Excel programima i razvojnim programerima pretvarajući ga u dodatak.

U ovom primjeru kako stvoriti objekt za čuvanje podataka, bio bi normalan pristup stvaranju višedimenzionalnog niza za pohranu podataka proračunske tablice s više stupaca, a vi biste napisali redak koda za ažuriranje ili čitanje svakog elementa u nizu. To bi vjerojatno završilo prilično neuredno i lako bi se mogle napraviti pogreške u adresiranju različitih elemenata.

S novim objektom jednostavno se možete pozvati na njega i članove koje ste stvorili ispod njega kako biste držali podatke.

Također, ako se podaci promijene u proračunskoj tablici (ili u povezanoj bazi podataka ako ste to koristili kao izvor podataka u svom modulu klase) kad god koristite izraz 'Dim', pozvat će se rutina inicijalizacije i podaci će se odmah ažurirati . Nema potrebe za pisanjem koda za ponovno popunjavanje vašeg niza.

Korištenje modula razreda za stvaranje promjenjivog spremišta

Kad pišete VBA kôd, koristite varijable posvuda, sve s različitim opsezima. Neke se mogu definirati samo za određeni postupak, neke za određeni modul, a neke mogu biti globalne varijable koje se mogu koristiti u cijeloj aplikaciji

Možete stvoriti modul klase koji će sadržavati veliki broj varijabli, a budući da je objekt, može se koristiti bilo gdje u vašem kodu, čak i na korisničkom obrascu ili u kontroli Active X koju ste postavili na radni list.

Dodatna prednost je što ćete, kada se obratite svom varijabilnom objektu, vidjeti popis svih imena varijabli koje se drže u objektu razvrstane prema rastućem redoslijedu.

Da biste stvorili spremište, morate umetnuti novi modul klase. To možete učiniti pomoću Insert | Modul razreda iz izbornika VB Editor

Promijenite naziv u "MyVariables" koristeći istu metodologiju kao što je prethodno objašnjeno u ovom članku.

Unesite sljedeći kôd:

12345678910111213141516 Privatno mV kao varijantaJavno svojstvo Dobijte varijablu1 () kao varijantuVarijabla1 = mVKraj imovineJavno svojstvo Neka varijabla1 (ByVal vNewValue kao varijanta)mV = vNova vrijednostKraj imovineJavno svojstvo Dobijte varijablu2 () kao varijantuVarijabla1 = mVKraj imovineJavno svojstvo Neka varijabla2 (ByVal vNewValue kao varijanta)mV = vNova vrijednostKraj imovine

Ovaj kôd postavlja svojstva "Let" i "Get" za dvije varijable ("Variable1" i "Variable2"). Svojstva Dopusti i Dohvati potrebna su za svaku vašu varijablu tako da se mogu čitati / pisati

Za varijable možete koristiti vlastite nazive umjesto uzoraka u ovom kodu, a možete dodati i druge varijable, pazeći da svaka nova varijabla ima naredbe 'Let' i 'Get'.

Privatna deklaracija varijable 'mV' je stvaranje radne varijable koja se koristi samo unutar modula klase za prijenos vrijednosti.

Da biste koristili spremište varijabli, unesite sljedeći kôd u standardni modul:

123456 Global VarRepo kao nove MyVariablesPod TestVariableRepository ()MsgBox VarRepo.Variable1VarRepo.Variable1 = 10MsgBox VarRepo.Variable1Kraj podm

Ovaj kôd stvara globalnu instancu vašeg objekta "MyVariables" koji ste stvorili. Ovu deklaraciju trebate učiniti samo jednom s bilo kojeg mjesta u vašem kodu.

Kôd prvo prikazuje vrijednost "Varijable1" kako bi pokazao da je prazna.

Vrijednosti 10 dodjeljuje se "Variable1", a zatim se prikazuje nova vrijednost unutar objekta koja pokazuje da ovo svojstvo sada drži tu vrijednost.

Budući da je instanca objekta 'MyVariables' definirana globalno, možete se pozvati na bilo koju od definiranih varijabli unutar objekta s bilo kojeg mjesta u vašem kodu.

Ovo ima veliku prednost u tome što, ako želite koristiti svoje varijable bilo gdje u svom kodu, trebate definirati samo jednu globalnu varijablu, a od tog trenutka svim se varijablama može slobodno pristupiti i mijenjati ih u cijelom kodu.

Izvrstan proizvod. AutoMacro ne samo da piše vaš kôd, već uči i dok idete! " - Tony, UK

Saznajte više

Pročitajte naše 900+ recenzija

Pretvaranje vašeg objekta u dodatak

Do sada je kôd za stvaranje objekta unutar vaše aplikacije radne knjige. Međutim, ako želite dijeliti svoj objekt s drugim programerima ili u drugim vlastitim Excel aplikacijama, možete ga pretvoriti u dodatak

Da biste to učinili, sve što se treba dogoditi je da datoteku spremite kao dodatak. Odaberite Datoteka | Spremi kao i pojavit će se prozor preglednika

Odaberite vrstu datoteke kao Dodatak (.xlam) s padajuće vrste datoteke i kliknite U redu. Datoteka će prema zadanim postavkama biti spremljena u mapu Add-In, ali možete promijeniti lokaciju.

Zatim možete dodati datoteku programskog dodatka u svoje Excel aplikacije, što vam daje fleksibilnost u korištenju vašeg novog objekta

Da biste svoj novi dodatak uključili u Excel, kliknite Datoteka na Excelovoj vrpci, a zatim kliknite Opcije pri dnu lijevog okna

Kliknite na "Dodaci" u lijevom oknu u skočnom prozoru koji se pojavi. Pri dnu prozora nalazi se gumb s oznakom "Idi"

Kliknite na ovo i pojavit će se skočni prozor 'Add-In'. Kliknite "Pregledaj", a zatim pronađite datoteku dodatka. Tada ćete se moći pozivati ​​na svoj objekt u svom kodu.

Vi ćete pomoći u razvoju web stranice, dijeljenje stranicu sa svojim prijateljima

wave wave wave wave wave