VBA klasės modulio pamoka ir pavyzdžiai

Ši pamoka išmokys jus apie VBA klasės modulius. Jūs sužinosite, kas jie yra ir kaip juos naudoti.

VBA klasės moduliai - įvadas

Kai įvedate modulius į „Visual Basic“ redaktorių (VBE), kad įvestumėte savo kodą, galbūt pastebėjote, kad taip pat galite įterpti vadinamąjį „klasės modulį“.

Klasės moduliai prieš modulius

Klasės moduliai veikia labai skirtingai nuo įprastų modulių, nes jie padeda sukurti komponento objekto modelį (COM), kurį vėliau galima naudoti pagal įprastą VBA kodą

Efektyviai sukuriate objektą, kuris veikia taip pat, kaip ir integruotas „Excel“ objektas, pvz., „Darbo lapai“. Objekte „Darblapiai“ turite daugybę savybių ir metodų, leidžiančių gauti darbaknygėje esančių darbalapių skaičių arba kiekvieną atskirą darbalapio pavadinimą arba daug kitos informacijos

Kai tokiu būdu sukuriate naują objektą, sukuriate bloką, kurį galima naudoti bet kurioje VBA vietoje. Objektas turi daugybę savybių ir metodų, kuriuos galima pasiekti naudojant VBA kodą iš bet kurios darbaknygės vietos, ir nereikia iš naujo rašyti kodo.

Be nuorodų į savo naują objektą iš standartinio VBA modulio, taip pat galite jį naudoti kodu, esančiu už „UserForm“, kuris yra jūsų pasirinktinės programos dalis

Taip pat galite jį naudoti ten, kur įdėjote „Active X“ valdiklius į darbalapį, pvz., Komandų mygtuką arba išskleidžiamąjį meniu. Visi šie valdikliai naudoja VBA, o jūsų naujas objektas gali būti lengvai įtrauktas į šių valdiklių įvykio kodą.

Taip pat galite objektą paversti „Excel“ priedu. Jūsų objektas bus automatiškai pasiekiamas kitiems vartotojams, kuriems tas papildinys buvo įkeltas. Tai prideda jūsų daugiapakopę architektūrą prie „Excel“ programos

„Excel“ yra daugiapakopė programa. Yra klientų aptarnavimo sluoksnis, kuris nukreipia tikrąjį darbalapio langą, kurį vartotojas žino. „Excel“ objekto modelis yra kitas sluoksnis po juo. Paspauskite F2 VBA modulyje ir galėsite pamatyti daugybę objektų ir tų objektų narių, kurie yra „Excel“ variklis. Atminkite, kad jūsų naujas objektas taip pat bus rodomas čia.

Galiausiai, po visa tai turite duomenų paslaugų sluoksnį, kuriame yra visi duomenys, kuriuos įvedėte į darbalapius ir langelius. „Excel“ tai pasiekia naudodama „Excel“ objekto modelį.

Sukūrę klasės modulį, galite išplėsti „Excel“ objektų modulį savo pasirinktiniais objektais ir nariais

Šiame straipsnyje paaiškinama, kaip sukurti paprastą objektų hierarchiją naudojant klasės modulius.

Klasės modulių naudojimo pranašumai

  1. Galite sukurti tvirtą statybinį bloką, kuris gali būti naudojamas bet kokiam skaičiui skirtingų „Excel“ programų
  2. Kai jis bus kruopščiai išbandytas, bus galima tikėtis, kad jis visada duos teisingus rezultatus taip pat, kaip ir integruoti „Excel“ objektai
  3. Jei kodas atnaujinamas kitoje programos vietoje, naujas objektas ir toliau veiks taip pat
  4. Naują objektą galite naudoti kitose „Excel“ programose kaip priedą
  5. Objektai gali būti pakartotinai naudojami kitose programose ir padeda derinti

Klasės modulių naudojimo trūkumai

  1. Juos gali būti sunku sukurti ir suprasti.
  2. Įvardijimo taisyklės yra labai svarbios, nes tai matysite, kai naudosite objektą įprastame modulyje.
  3. Jei anksčiau nesukūrėte klasės modulio, juos gali būti sunku suprasti ir yra staigi mokymosi kreivė
  4. Neįmanoma atlikti pakeitimų vykdymo metu-turite iš naujo nustatyti projektą.
  5. Jei ypatybės ir privatūs kintamieji turi tą patį pavadinimą, gali atsirasti begalinės kilpos, dėl kurių gali atsirasti klaidų

Klasės modulio įterpimas

Pasirinkite Įterpti | Klasės modulis iš VBE (Visual Basic Editor) meniu. Naujasis klasės modulis automatiškai bus vadinamas „1 klase“, tačiau jį reikia nedelsiant pakeisti į pavadinimą, kurį naudosite savo objektui

Pavadinimą keičiate lange „Ypatybės“, į kurį nukreipta rodyklė. Tiesiog įveskite savo naują pavadinimą ir tai pasikeis „Class Modules“ kolekcijoje

Jei ypatybių langas nematomas, pasirinkite Rodinys | Savybės VBE meniu arba paspauskite F4

Paskambinkite naujam klasės moduliui „MyItem“ ir dukart spustelėkite pavadinimą medžio rodinyje „Project Explorer“, kad būtų parodytas jo kodo langas.

Objekto elemento kūrimas

Šis pavyzdys sukurs aukščiausio lygio objektą, pavadintą „MyItems“, po juo esantį nario objektą, vadinamą „MyItem“, kuriame bus saugomi kiekvieno elemento individualūs duomenys. Sukūrus jis veiks taip pat, kaip ir sukurtas „Excel“ objektas. Pavyzdžiui, yra objektas „Darbo lapai“, kuris yra kiekvieno jūsų darbaknygės darbalapio rinkinys. Taip pat yra objektas, vadinamas lape, kuris vaizduoja kiekvieną atskirą jūsų darbaknygės darbalapį ir turi visas kiekvieno darbalapio savybes ir metodus. Šis objektas yra susijęs su „darbalapių“ kolekcijos objektu.

Galite kartoti „Darbo lapų“ kolekciją, paeiliui peržiūrėdami kiekvieną „Lapą“. Tuo pačiu būdu galėsite kartoti kolekciją „MyItems“, peržiūrėdami ypatybes, kurias sukūrėte „Myitem“ naryje.

Pirmas dalykas, kurį reikia padaryti, yra sukurti antrinį objektą nario lygiui, kuriame bus tikri elementai aukščiausio lygio objekto kolekcijoje. Tai yra „Excel“ objekto „Sheet“ narių atitikmuo (pvz., Vardas, matomas, skaičius). Šis kodas įvedamas į klasės modulį „MyItem“

Klasės moduliai turi savybių ir metodų. Savybės iš tikrųjų yra panašios į kintamuosius, nes jose yra duomenų, kaip kintamųjų, vertės, o metodai - kaip papildomos procedūros ar funkcijos.

Antrame objekte mes sukursime dvi objekto savybes - elementą ir detalę

Iš pradžių reikia deklaruoti du eilutės kintamuosius, kad būtų išlaikytos savybių vertės:

12 Privatus elementas kaip eilutėPrivatus „mDetail“ kaip eilutė

Jie turi būti nurodyti klasių modulio kodo viršuje esančioje skiltyje „Deklaracijos“, kad juos būtų galima naudoti visose modulio dalinėse procedūrose

Jiems reikia suteikti unikalius pavadinimus, kad jie skirtųsi nuo savybių, kurias ketiname sukurti, todėl prieš kiekvieną vardą buvo įrašytas „m“ (nariui).

Kintamieji yra paskelbti kaip privatūs, todėl niekas negali matyti objekto. Jie yra kintamieji, skirti naudoti objekto kode ir nėra ten kaip galutinio objekto dalis.

Kitas žingsnis yra nustatyti kodą, kad būtų suteikta prieiga prie dviejų ypatybių. Tai galite padaryti naudodami nuosavybės leidimą ir nuosavybės gavimo ataskaitą kiekvienai nuosavybei. Jie turi būti vieši, kitaip aukščiausio lygio objektas neturės jokių matomų savybių

123456789101112131415 Viešosios nuosavybės leidimo elementas (vdata kaip eilutė)mItem = vdataGalutinis turtasViešoji nuosavybė Gauti elementą () kaip eilutęElementas = mItemGalutinis turtasViešosios nuosavybės išsami informacija („vdata“ kaip eilutė)mDetail = vdataGalutinis turtasViešoji nuosavybė Išsami informacija () kaip eilutėDetalė = mDetailGalutinis turtas

Šis kodas sukuria priemones skaityti ir rašyti reikšmes į dvi ypatybes (elementą ir detalę), naudojant du privačius kintamuosius, kurie buvo apibrėžti modulio deklaracijų skiltyje.

Parametras „vdata“ naudojamas perduoti duomenis atitinkamai nuosavybei.

Svarbu, kad kiekviena nuosavybė turėtų teiginius „Leisti“ ir „Gauti“ ir kad kiekvienu atveju nuosavybės pavadinimas būtų tas pats. Netinkamai parašę galite gauti dvi skirtingas savybes - vieną, iš kurios galite skaityti, ir kitą, į kurią galite rašyti!

Norėdami padėti sukurti šį kodą, galite naudoti Įterpti | VBE meniu procedūra, skirta sukurti kodo skeletą, kuris sukurs pradinį „Get“ ir „Let“ ypatybių kodą tam tikram nuosavybės pavadinimui

Bus rodomas iššokantis langas, kuriame įvesite nuosavybės pavadinimą ir radijo mygtukuose pasirinkite „Nuosavybė“:

Spustelėkite „Gerai“ ir skeleto kodas bus įtrauktas į klasės modulį:

1234567 Viešoji nuosavybė Gauti „MyProperty“ () kaip variantąGalutinis turtasViešoji nuosavybė Tegul mano nuosavybė („ByVal vNewValue as Variant“)Galutinis turtas

Taip išvengiama klaidų, susijusių su nuosavybės pavadinimais. Tiesiog pridėkite savo kodą tarp teiginių „Viešoji nuosavybė“ ir „Galutinė nuosavybė“.

Dabar turite objektą, pavadintą „MyItem“, kuriame bus visi šio pratimo duomenys.

Pavargote ieškoti VBA kodo pavyzdžių? Išbandykite „AutoMacro“!

Kolekcijos kūrimas

Kitas etapas yra sukurti aukščiausio lygio objektą kaip kolekcijos objektą, kad būtų suteikta prieiga prie savybių, kurias nustatėte objekte „MyItem“

Vėlgi, turite apibrėžti darbinį objektą, kuris veiktų kaip surinkimo objektas, kaip ir apibrėžėte du eilutės kintamuosius objekte „MyItem“.

1 Asmeniniai daiktai kaip kolekcija

Vėlgi, tai turi turėti unikalų pavadinimą, todėl priešais pavadinimą yra „m“ (nario objektas), jis taip pat paskelbiamas „privačiu“, kad jis nebūtų rodomas, kai bus kuriamas naujas objektas naudojamas

Tada turite užpildyti „Class_Initialize“ kodą. Tai vykdoma, kai pirmą kartą naudojate objektą savo kode, ir nustatoma, kokios vertės bus įkeliamos į objektą

Šią papildomą tvarką galite pasiekti pasirinkę „Klasė“ pirmame išskleidžiamajame meniu ir „Inicijuoti“ antrame modulio lango išskleidžiamajame meniu

12345678910 Privati ​​sub klasė_inicijuoti ()Prastas objektas Kaip MyItemNustatyti mItems = New CollectionJei n = 1–3Nustatyti objItem = New MyItemobjItem.Item = Darbo lapai ("Sheet1"). Diapazonas ("a" & n) .VertybėobjItem.Detail = Darbo lapai ("Sheet1"). Diapazonas ("b" & n) .VertybėmItems.Add objItemKitas nPabaiga Sub

Kodas nustato objektą, pavadintą „objItem“, naudojant „MyItem“ apibrėžimą, kurį anksčiau sukūrėme kaip klasės modulį.

Tada ji sukuria naują kolekciją, pagrįstą anksčiau apibrėžtu objektu „mItems“

Jis kartojamas pagal darbaknygės 1 lape esančias vertes ir įtraukia jas į ypatybes, kurias sukūrėme objektui „MyItem“. Atminkite, kad kai naudojate „objitem“, pasirodo išskleidžiamasis meniu, rodantis dvi ypatybes, lygiai taip, lyg naudotumėte įmontuotą „Excel“ objektą.

Tada objekto objektas įtraukiamas į surinkimo objektą, kuriame dabar yra visi duomenys, esantys nuosavybės vertėse.

Įvesties duomenys neturi būti paimti iš darbalapio. Tai gali būti statinės vertės arba prisijungimas prie duomenų bazės, pvz., „Microsoft Access“ ar „SQL Server“, arba iš kito darbalapio.

Tada turite pridėti viešą funkciją „Elementas“

123 Viešosios funkcijos elementas (indeksas kaip sveikasis skaičius) Kaip mano elementasNustatyti elementą = mItems.Item (indeksas)Pabaigos funkcija

Tai leidžia nurodyti atskirus kolekcijos objekto objektus pagal jų indekso numerį. Ši funkcija yra „veidrodis“ to, kas vyksta fone esančioje kolekcijoje „mMyItems“.

Taip pat turėsite pridėti nuosavybę, pavadintą „Count“, kad jūsų kodas galėtų nustatyti, kiek „MyItem“ objektų yra kolekcijoje „MyItems“, jei norite ją kartoti.

123 Viešoji nuosavybė skaičiuojama () kaip ilgaiCount = mItems.CountGalutinis turtas

Tokiu atveju jums reikia tik savybės „Gauti“, nes ji yra tik skaitoma. Ji naudoja „mItems“ kolekciją, nes joje jau yra integruota skaičiavimo ypatybė.

Dabar turite objektą („MyItems“) su visa hierarchija, apibrėžta objekto „MyItem“

Kad visa tai veiktų, dabar turite užpildyti darbalapį (Sheet1) su duomenimis, kad klasės inicijavimo rutina galėtų surinkti tai į objektą

Jūsų skaičiuoklė turėtų atrodyti taip:

Naujo objekto naudojimas

Dabar savo kolekcijos objektą („MyItems“) galite naudoti standartiniame „Excel“ VBA modulyje. Įveskite šį kodą:

12345678 Antrasis test_object ()„Dim MyClass“ kaip nauji „MyItems“, n kaip sveikasis skaičius„MsgBox MyClass.Count“Jei n = 1 į „MyClass.Count“„MsgBox MyClass.Item“ (n). „Item“„MsgBox MyClass.Item“ (n). Išsami informacijaKitas nPabaiga Sub

Šis kodas sukuria objektą pavadinimu „MyClass“, remdamasis jūsų sukurtu kolekcijos objektu, pavadinimu „MyItems“. Tai suaktyvina „Inicijuoti“ procedūrą, kuri ištraukia visus duomenis iš darbalapio į objektą.

Jame rodomas kolekcijos elementų skaičius ir jis kartojasi per kolekciją, parodydamas tekstą „Elementas“ ir „Išsami informacija“. Pastebėsite, kad kai savo kode nurodote objektą „Mano klasė“, pamatysite dviejų narių ypatybių sąrašą, kuris padeda pridėti teisingą nuosavybę.

Jei pakeisite skaičiuoklės įvesties duomenų langelio vertę, tai bus automatiškai atnaujinta kolekcijoje, kai dar kartą paleidžiate aukščiau nurodytą kodą, nes kai matuojate objektą, inicijuojama rutina vykdoma ir paimama visi nauji duomenys

Jei vietoj „Dim“ naudojate žodį „Statinis“, inicializavimo procedūra neįvykdoma ir išsaugomos senosios vertės, kol kodas nuolat veikia. Jei skaičiuoklės duomenys pasikeis, tai nebus atspindėta objekte

1234567 Antrinis testas_statinis ()„Static Myclass As New MyItems“, n kaip sveikasis skaičiusJei n = 1 iki „Myclass.Count“MsgBox Myclass.Item (n) .Item„MsgBox Myclass“. Elementas (n). Išsami informacijaKitas nPabaiga Sub

Objekto kūrimo naudojant klasės modulį santrauka

Kaip matėte, klasių modulių, naudojamų kaip objektas, hierarchijos sukūrimas yra gana sudėtingas verslas, net ir tokios paprastos struktūros kaip čia pateiktas pavyzdys. Galimybė daryti klaidas yra didžiulė!

Tačiau jis turi daug privalumų, nes jūsų kodas tampa elegantiškesnis ir lengviau skaitomas. Taip pat lengviau bendrinti su kitomis „Excel“ programomis ir kūrėjais, paverčiant jį priedu.

Šiame pavyzdyje, kaip sukurti objektą duomenims laikyti, būtų įprastas būdas sukurti daugiamatį masyvą, kuriame būtų saugomi kelių stulpelių skaičiuoklės duomenys, ir parašytumėte kodo eilutę, kad atnaujintumėte arba perskaitytumėte kiekvieną elementą masyvas. Tai tikriausiai būtų gana netvarkinga, o sprendžiant įvairius elementus būtų galima lengvai padaryti klaidų.

Naudodami naują objektą galite tiesiog kreiptis į jį ir po juo sukurtus narius, kad galėtumėte saugoti duomenis.

Be to, jei duomenys pasikeis skaičiuoklėje (arba susietoje duomenų bazėje, jei tai panaudojote kaip duomenų šaltinį savo klasės modulyje), kai naudojate teiginį „Dim“, bus iškviesta inicijavimo tvarka ir duomenys bus nedelsiant atnaujinti . Norint iš naujo užpildyti masyvą, nereikia rašyti kodo.

Klasių modulio naudojimas kintamųjų saugyklai sukurti

Kai rašote VBA kodą, visur naudojate kintamuosius, skirtingus taikymo sritis. Kai kurie gali būti apibrėžti tik tam tikrai procedūrai, kai kurie - tam tikram moduliui, o kai kurie gali būti visuotiniai kintamieji, kuriuos galima naudoti visoje programoje

Galite sukurti klasės modulį, kuriame bus daug kintamųjų, ir kadangi jis yra objektas, jis gali būti naudojamas bet kurioje jūsų kodo vietoje, net vartotojo formoje arba „Active X“ valdiklyje, kurį įdėjote į darbalapį.

Papildomas pranašumas yra tas, kad kai nurodysite savo kintamąjį, pamatysite visų objekte esančių kintamųjų pavadinimų sąrašą, surūšiuotą didėjančia tvarka.

Norėdami sukurti saugyklą, turite įterpti naują klasės modulį. Tai galite padaryti naudodami Įterpti | Klasės modulis iš VB redaktoriaus meniu

Pakeiskite pavadinimą į „Mano kintamieji“ naudodami tą pačią metodiką, kaip anksčiau aptarta šiame straipsnyje.

Įveskite šį kodą:

12345678910111213141516 Privatus mV kaip variantasViešoji nuosavybė Gaukite kintamąjį1 () kaip variantąKintamasis 1 = mVGalutinis turtasViešosios nuosavybės leidimas 1 kintamasis („ByVal vNewValue As Variant“)mV = vNeVValueGalutinis turtasViešoji nuosavybė Gauti kintamąjį2 () kaip variantąKintamasis 1 = mVGalutinis turtasViešosios nuosavybės leistinis kintamasis2 („ByVal vNewValue As Variant“)mV = vNeVValueGalutinis turtas

Šis kodas nustato dviejų kintamųjų („Variable1“ ir „Variable2“) ypatybes „Leisti“ ir „Gauti“. Leisti ir gauti ypatybės būtinos kiekvienam jūsų kintamajam, kad jie būtų skaitomi / rašomi

Galite naudoti savo kintamųjų pavadinimus, o ne pavyzdinius šiame kode, ir pridėti kitų kintamųjų, įsitikindami, kad kiekvienas naujas kintamasis turi „Leisti“ ir „Gauti“.

Privati ​​kintamojo „mV“ deklaracija yra sukurti veikiantį kintamąjį, kuris naudojamas tik klasės modulyje reikšmėms perkelti.

Norėdami naudoti kintamųjų saugyklą, įveskite šį kodą į standartinį modulį:

123456 Pasaulinis „VarRepo“ kaip nauji kintamiejiAntrinis bandymasVariableRepository ()„MsgBox VarRepo“. KintamasisVarRepo. Kintamasis = 10„MsgBox VarRepo“. KintamasisPabaiga Sub

Šis kodas sukuria visuotinį jūsų sukurto „MyVariables“ objekto egzempliorių. Šią deklaraciją turite atlikti tik vieną kartą iš bet kurios savo kodo vietos.

Pirmiausia kodas parodo „Kintamojo1“ reikšmę, kad parodytų, kad jis tuščias.

„Kintamajam 1“ priskiriama 10 reikšmė, o tada rodoma nauja objekto vertė, parodanti, kad ši savybė dabar turi šią vertę.

Kadangi objekto „Mano kintamieji“ egzempliorius buvo apibrėžtas visame pasaulyje, galite kreiptis į bet kurį iš objekto apibrėžtų kintamųjų iš bet kurios savo kodo vietos.

Tai turi didžiulį pranašumą, nes jei norite naudoti savo kintamuosius bet kurioje savo kodo vietoje, turite apibrėžti tik vieną visuotinį kintamąjį, ir nuo to laiko visi kintamieji gali būti laisvai prieinami ir keičiami visame jūsų kode.

Objekto pavertimas priedu

Iki šiol objekto kūrimo kodas yra jūsų darbaknygės programoje. Tačiau, jei norite bendrinti savo objektą su kitais kūrėjais ar kitomis savo „Excel“ programomis, galite jį paversti priedu

Norėdami tai padaryti, tereikia išsaugoti failą kaip priedą. Pasirinkite Failas | Išsaugoti kaip ir pasirodys naršyklės langas

Išskleidžiamajame failo tipo meniu pasirinkite failo tipą kaip priedas (.xlam) ir spustelėkite Gerai. Failas pagal numatytuosius nustatymus bus išsaugotas priedo aplanke, tačiau vietą galite pakeisti.

Tada galite įtraukti papildinio failą į savo „Excel“ programas, suteikdami lankstumo naudoti naują objektą

Norėdami įtraukti naują priedą į „Excel“, „Excel“ juostelėje spustelėkite Failas, tada kairės srities apačioje spustelėkite Parinktys

Pasirodžiusio iššokančiojo lango kairiojoje srityje spustelėkite „Papildiniai“. Lango apačioje yra mygtukas „Eiti“

Spustelėkite tai ir pasirodys iššokantis langas „Priedas“. Spustelėkite „Naršyti“ ir suraskite savo priedo failą. Tada savo kode galėsite nurodyti savo objektą.

Padėsite svetainės plėtrą, dalintis puslapį su draugais

wave wave wave wave wave