VBA klassi mooduli õpetus ja näited

See õpetus õpetab teile VBA klassimoodulitest. Saate teada, mis need on ja kuidas neid kasutada.

VBA klassi moodulid - sissejuhatus

Kui sisestate mooduleid Visual Basic Editorisse (VBE) oma koodi sisestamiseks, olete võib -olla märganud, et saate sisestada ka nn klassimooduli.

Klassi moodulid vs moodulid

Klassimoodulid töötavad tavalistest moodulitest väga erineval viisil, kuna hõlbustavad komponendiobjektimudeli (COM) loomist, mida saab seejärel kasutada teie tavalise VBA -koodi piires

Tõhusalt loote objekti, mis töötab samamoodi nagu sisseehitatud Exceli objekt, näiteks „Töölehed”. Objektis Töölehed on teil mitmeid atribuute ja meetodeid, mis võimaldavad teil saada töövihiku töölehtede arvu või töölehe iga nime või palju muud teavet

Kui loote sel viisil uue objekti, loote ehitusploki, mida saab kasutada kõikjal VBA -s. Objektil on mitmeid atribuute ja meetodeid, millele pääseb juurde teie VBA-koodiga kõikjal töövihikus, ilma et peaksite koodi uuesti kirjutama.

Lisaks uuele objektile viitamisel tavalisest VBA -moodulist saate seda kasutada ka koodis kasutajavormi taga, mis on teie kohandatud rakenduse osa

Saate seda kasutada ka siis, kui olete Active X -juhtelemendid töölehele paigutanud, näiteks käsunupp või rippmenüü. Kõik need juhtelemendid kasutavad VBA -d ja teie uue objekti saab hõlpsasti lisada nende juhtelementide sündmuste koodi.

Samuti saate muuta oma objekti Exceli lisandmooduliks. Teie objekt on automaatselt kättesaadav teistele kasutajatele, kellele see lisandmoodul on laaditud. See lisab teie Exceli rakendusele teie mitmetasandilise arhitektuuri

Excel on mitmetasandiline rakendus. Seal on klienditeeninduse kiht, mis juhib tegelikku töölehe akent, millega kasutaja on tuttav. Exceli objektimudel on järgmine kiht all. Vajutage VBA moodulis klahvi F2 ja näete tohutul hulgal objekte ja nende objektide liikmeid, mis on Exceli mootor. Pange tähele, et siin kuvatakse ka teie uus objekt.

Lõpuks, selle kõige all on teil andmeteenuste kiht, mis sisaldab kõiki töölehtedele ja lahtritesse sisestatud andmeid. Excel pääseb sellele juurde Exceli objekti mudeli abil.

Klassimooduli loomine võimaldab laiendada Exceli objektimoodulit oma kohandatud objektide ja liikmetega

See artikkel selgitab teile, kuidas luua klassimoodulite abil lihtsat objektide hierarhiat.

Klassimoodulite kasutamise eelised

  1. Saate välja töötada tugeva ehitusploki, mida saab kasutada paljudes erinevates Exceli rakendustes
  2. Kui see on põhjalikult testitud, saab selle põhjal alati loota õigeid tulemusi samamoodi nagu sisseehitatud Exceli objektid
  3. Kui koodi uuendatakse mujal rakenduses, töötab uus objekt endiselt samal viisil
  4. Saate oma uut objekti lisandmoodulina kasutada ka teistes Exceli rakendustes
  5. Objekte saab teistes rakendustes uuesti kasutada ja see aitab siluda

Klassimoodulite kasutamise puudused

  1. Neid võib olla raske luua ja mõista.
  2. Nimetamisviisid on väga olulised, sest seda näete, kui kasutate oma objekti tavalises moodulis.
  3. Kui te pole klassimoodulit varem loonud, võib neist olla raske aru saada ja seal on järsk õppimiskõver
  4. Käitusajal on võimatu muudatusi teha-peate projekti uuesti seadistama.
  5. Kui atribuutidel ja privaatsetel muutujatel on sama nimi, võib tekkida lõputu tsükkel, mis võib põhjustada vigu

Klassimooduli sisestamine

Valige Lisa | Klassi moodul VBE (Visual Basic Editor) menüüst. Uut klassimoodulit nimetatakse automaatselt klassiks 1, kuid see tuleb kohe muuta nimeks, mida kavatsete oma objekti jaoks kasutada

Nime saate muuta atribuutide aknas, kuhu nool osutab. Sisestage lihtsalt oma uus nimi ja see muutub klassimoodulite kogumis

Kui atribuutide akent pole näha, valige Vaade | Atribuudid menüüs VBE või vajutage klahvi F4

Helistage oma uuele klassimoodulile „MyItem” ja topeltklõpsake Project Exploreri puuvaates olevat nime, et kuvada selle koodiaken.

Objektiüksuse loomine

See näide loob tipptasemel objekti nimega „MyItems”, mille all on liikmeobjekt nimega „MyItem”, mis hoiab iga üksuse individuaalseid andmeid. Kui see on loodud, töötab see samamoodi nagu sisseehitatud Exceli objekt. Näiteks on olemas objekt nimega „Töölehed”, mis on teie töövihiku iga töölehe kogumik. Samuti on objekt nimega „Leht”, mis esindab teie töövihiku iga üksikut töölehte ja sisaldab kõiki töölehe omadusi ja meetodeid. See objekt on seotud kogumisobjektiga „Töölehed”.

Saate iteratsiooni koguda „Töölehed”, vaadates iga „Lehte” kordamööda. Samamoodi saate iteratsiooni kogumikus „MyItems” vaadata, vaadates atribuute, mille lõite liikmes „Myitem”.

Esimene asi, mida teha, on luua alamobjekt liikmetasandile, mis hoiab tipptasemel objekti kogu tegelikke üksusi. See on samaväärne Exceli lehe „Leht” liikmete (nt nimi, nähtav, arv) sisaldusega. See kood sisestatakse klassimoodulisse nimega „MyItem”

Klassimoodulitel on omadused ja meetodid. Atribuudid on tegelikult muutujad, kuna need sisaldavad andmete väärtusi nagu muutujad ja meetodid on nagu alamrutiinid või funktsioonid.

Alamobjektis loome objektile kaks omadust - üksus ja detail

Atribuutide väärtuste hoidmiseks tuleb esialgu deklareerida kaks stringimuutujat:

12 Privaatne mItem kui stringPrivaatne mDetail stringina

Need tuleb deklareerida klassimooduli koodi ülaosas jaotises Deklaratsioonid, et neid saaks kasutada mooduli kõikides alamrutiinides

Neile tuleb anda ainulaadsed nimed, et need erineksid omadustest, mida me loome, nii et iga nime ette on pandud „m” (liikme jaoks).

Muutujad kuulutatakse privaatseks, nii et neid ei saa keegi objekti kasutades näha. Need on töötavad muutujad, mida saab kasutada objektikoodis ja need ei ole seal lõpliku objekti osana.

Järgmine samm on koodi seadistamine, et anda juurdepääs kahele atribuudile. Seda saate teha iga kinnisvara kohta kinnisvaralehe ja kinnisvara hankimise avalduse abil. Need peavad olema avalikud, vastasel juhul ei ole tipptasemel objektil nähtavaid omadusi

123456789101112131415 Avalik omand lubab üksuse (vdata stringina)mItem = vdataLõplik varaAvalik omand Hangi üksus () stringinaÜksus = mItemLõplik varaAvaliku omandi üksikasjad (vdata stringina)mDetail = vdataLõplik varaAvaliku omandi üksikasjad () stringinaDetail = mDetailLõplik vara

See kood loob vahendid väärtuste lugemiseks ja kirjutamiseks kahele atribuudile (üksus ja detail), kasutades kahte privaatset muutujat, mis olid määratletud mooduli deklaratsioonide jaotises.

Parameetrit „vdata” kasutatakse andmete edastamiseks asjaomasele varale.

On oluline, et igal atribuudil oleks lause „Lase” ja „Hangi” ning et vara nimi oleks igal juhul sama. Valesti kirjutamise korral võib teil olla kaks erinevat atribuuti - üks, millest saate lugeda ja teine, millele saate kirjutada!

Selle koodi loomisel saate kasutada sisestust | Menüü VBE koodiskeleti loomiseks, mis loob antud atribuudi nimele „Get” ja „Let” atribuutide algkoodi

See kuvab hüpikakna, kuhu sisestate atribuudi nime ja valite raadionuppudel "Atribuut":

Klõpsake „OK“ ja skeleti kood lisatakse klassimoodulisse:

1234567 Avalik vara Hangi MyProperty () variandinaLõplik varaAvalik omand lase minu omandil (ByVal vNewValue as Variant)Lõplik vara

See hoiab ära vead atribuutide nimede osas. Lisage oma kood avalduste „Avalik omand” ja „Lõppvara” vahele.

Nüüd on teil objekt nimega „MyItem”, mis sisaldab kõiki selle harjutuse andmeid.

Kas olete väsinud VBA koodinäidete otsimisest? Proovige AutoMacrot!

Kollektsiooni loomine

Järgmine etapp on luua tipptasemel objekt kogumisobjektina, et anda juurdepääs atribuutidele, mille olete seadistanud objektis „MinuItem”

Jällegi peate määratlema tööobjekti, et see toimiks kogumisobjektina samamoodi nagu määratlesite kaks stringimuutujat objektis „MyItem”.

1 Privaatsed objektid kogumikuna

Jällegi peab sellel olema unikaalne nimi, mistõttu on nime ees „m” (liikmeobjekt) ja see kuulutatakse ka privaatseks, nii et see ei ilmu uue objekti esitamisel kasutatud

Järgmisena peate sisestama koodi Class_Initialize. See käivitub, kui kasutate objekti esmakordselt oma koodis, ja see määrab, millised väärtused objekti laaditakse

Sellele alamrutiinile pääsemiseks valige mooduli akna esimeses rippmenüüs „Klass” ja teises rippmenüüs „Initsialiseeri”

12345678910 Privaatne alamklass_algatus ()Dim ObjItem Nagu MyItemSet mItems = Uus koguN = 1 kuni 3Määra objItem = Uus MyItemobjItem.Item = Töölehed ("Sheet1"). Vahemik ("a" & n) .VäärtusobjItem.Detail = Töölehed ("Sheet1"). Vahemik ("b" & n) .VäärtusmItems.Add objItemJärgmine nEnd Sub

Kood seab objekti nimega „objItem”, kasutades määratlust „MyItem”, mille ehitasime varem klassimoodulina.

Seejärel loob see uue kollektsiooni, mis põhineb varem määratletud objektil „mItems”

See kordab töövihiku lehel 1 olevate väärtuste kaudu ja paigutab need atribuutidesse, mille lõime objekti „MyItem” jaoks. Pange tähele, et kui kasutate objekti „objitem”, ilmub rippmenüü, mis näitab kahte omadust täpselt nii, nagu kasutaksite sisseehitatud Exceli objekti.

Seejärel lisatakse üksuse objekt kogumisobjekti, mis hoiab nüüd kõiki atribuudi väärtusi sisaldavaid andmeid.

Sisendandmeid ei pea töölehelt võtma. Need võivad olla staatilised väärtused või ühendus andmebaasiga, näiteks Microsoft Access või SQL Server, või teisest töölehest.

Seejärel peate lisama avaliku funktsiooni nimega „Üksus”

123 Avaliku funktsiooni üksus (indeks täisarvuna) kui MyItemMäära üksus = mItems.Item (indeks)Lõppfunktsioon

See võimaldab viidata kogumisobjekti üksikutele objektidele nende registrinumbri järgi. See funktsioon annab peegli taustal kollektsioonis „mMyItems” toimuvale.

Peate lisama ka atribuudi nimega „Count”, et teie kood saaks kindlaks teha, kui palju „MyItem” objekte on kollektsioonis „MyItems”, kui soovite seda kordada.

123 Avalikku vara loetakse () nii pikaksLoend = mItems.CountLõplik vara

Sel juhul vajate ainult omadust „Hangi”, kuna see on kirjutuskaitstud. See kasutab kogumit mItems, kuna sellesse on juba sisse ehitatud loendamisomadused.

Teil on nüüd objekt (MyItems), millel on täielik hierarhia, mille määratleb objekt „MyItem”

Et kogu asi toimiks, peate nüüd töölehe (leht 1) täitma andmetega, nii et klassi lähtestamise rutiin saaks selle objekti koguda

Teie arvutustabel peaks välja nägema selline:

Uue objekti kasutamine

Nüüd saate oma kollektsiooni objekti (MyItems) kasutada tavalises Exceli VBA moodulis. Sisestage järgmine kood:

12345678 Alamkatseobjekt ()Dim MyClass kui uued MyItems, n täisarvunaMsgBox MyClass.CountKui n = 1 MyClass.CountMsgBox MyClass.Item (n) .ItemMsgBox MyClass.Item (n). ÜksikasjadJärgmine nEnd Sub

See kood loob objekti nimega „MyClass”, mis põhineb teie loodud kogumisobjektil „MyItems”. See käivitab rutiini „Initsialiseerimine”, mis ekstraheerib kõik andmed töölehelt objekti.

See kuvab kollektsiooni üksuste arvu ja seejärel kordab kogu, näidates teksti „Üksus” ja „Üksikasjalik”. Märkate, et kui viidate oma koodis olevale objektile „MyClass”, näete kahe liikme atribuutide loendit, mis aitab õiget atribuuti lisada.

Kui muudate arvutustabeli sisendandmete lahtri väärtust, värskendatakse seda kogus automaatselt, kui ülaltoodud koodi uuesti käivitate, kuna objekti mõõtmete määramisel käivitatakse rutiin ja võetakse kokku kõik uued andmed

Kui kasutate sõna „Staatiline” asemel „Dim”, siis lähtestamisrutiin ei tööta ja vanad väärtused säilitatakse seni, kuni kood töötab pidevalt. Kui arvutustabeli andmed muutuvad, ei kajastu see objektil

1234567 Alamkatse_statiline ()Staatiline Myclass kui uued MyItems, n nagu täisarvKui n = 1 kuni Myclass.CountMsgBox Myclass.Item (n) .ItemMsgBox Myclass.Item (n). ÜksikasjadJärgmine nEnd Sub

Klassimooduli abil objekti loomise kokkuvõte

Nagu nägite, on klassimoodulite hierarhia loomine objektina kasutamiseks üsna keeruline äri isegi nii lihtsa struktuuri jaoks nagu siin toodud näide. Vigade tegemise võimalus on tohutu!

Sellel on aga tohutud eelised, muutes teie koodi elegantsemaks ja hõlpsamini loetavaks. Samuti on seda lihtsam teiste Exceli rakenduste ja arendajatega jagada, muutes selle lisandmooduliks.

Selles näites, kuidas luua objekti andmete hoidmiseks, oleks tavaline lähenemisviis luua mitmemõõtmeline massiiv mitmeveeruliste arvutustabeli andmete hoidmiseks ja kirjutada koodirida, et värskendada või lugeda iga elementi massiivi. See oleks tõenäoliselt üsna segane ja erinevate elementide käsitlemisel võidakse kergesti teha vigu.

Oma uue objektiga saate andmete hoidmiseks lihtsalt viidata sellele ja liikmetele, mille olete selle alla loonud.

Samuti, kui arvutustabelis (või lingitud andmebaasis, kui olete seda oma klassimooduli andmeallikana kasutanud) andmed muutuvad, kui kasutate lauset „Dim”, kutsutakse sisse lähtestamisrutiin ja andmeid värskendatakse koheselt . Massiivi uuesti täitmiseks pole vaja koodi kirjutada.

Klassimooduli kasutamine muutujate hoidla loomiseks

VBA -koodi kirjutamisel kasutate kõikjal muutujaid, kõik erineva ulatusega. Mõned võivad olla määratletud ainult konkreetse protseduuri jaoks, mõned konkreetse mooduli jaoks ja mõned võivad olla globaalsed muutujad, mida saab kasutada kogu rakenduses

Saate luua klassimooduli, mis mahutab suure hulga muutujaid ja kuna see on objekt, saab seda kasutada kõikjal teie koodis, isegi kasutajavormil või Active X -juhtelemendis, mille olete töölehele paigutanud.

Täiendav eelis on see, et kui viidate oma muutuvale objektile, näete kasvavas järjekorras kõigi objektis olevate muutujate nimede loendit.

Hoidla loomiseks peate sisestama uue klassi mooduli. Seda saate teha, kasutades Insert | Klassimoodul menüüst VB Editor

Muutke nimeks „MyVariables”, kasutades sama metoodikat, mida selles artiklis varem arutati.

Sisestage järgmine kood:

12345678910111213141516 Privaatne mV kui variantAvalik omand Hangi muutuja1 () variandinaMuutuja1 = mVLõplik varaAvaliku omandi muutuja1 (ByVal vNewValue as Variant)mV = vNeVäärtusLõplik varaAvalik omand Hangi muutuja2 () variandinaMuutuja1 = mVLõplik varaAvaliku omandi muutuja2 (ByVal vNewValue as Variant)mV = vNeVäärtusLõplik vara

See kood seab kahe muutuja („Variable1” ja „Variable2”) omadused „Let” ja „Get”. Atribuudid Let and Get on iga muutuja jaoks vajalikud, et neid lugeda / kirjutada

Selles koodis näidiste asemel saate kasutada muutujate jaoks oma nimesid ja lisada veel muutujaid, veendudes, et igal uuel muutujal on lause „Let” ja „Get”.

Muutuja „mV” privaatdeklaratsioon on luua töötav muutuja, mida kasutatakse väärtuste edastamiseks ainult klassimoodulis.

Muutujate hoidla kasutamiseks sisestage standardmoodulisse järgmine kood:

123456 Globaalne VarRepo kui uued MyVariablesAlamkatseVariableRepository ()MsgBox VarRepo.Variable1VarRepo.Variable1 = 10MsgBox VarRepo.Variable1End Sub

See kood loob teie loodud „MyVariables” objekti globaalse eksemplari. Selle deklaratsiooni peate tegema ainult üks kord oma koodi kõikjalt.

Kood kuvab kõigepealt väärtuse „Variable1”, et näidata, et see on tühi.

Muutujale 1 määratakse väärtus 10 ja seejärel kuvatakse objekti uus väärtus, mis näitab, et see atribuut omab seda väärtust.

Kuna objekti „MyVariables” eksemplar on määratletud globaalselt, saate viidata mis tahes määratletud muutujale objektis kõikjal oma koodis.

Sellel on tohutu eelis, kuna kui soovite oma muutujaid kasutada kõikjal oma koodis, peate määratlema ainult ühe globaalse muutuja ja sellest juhtumist alates on kõik muutujad teie koodis vabalt juurdepääsetavad ja muudetavad.

Objekti muutmine lisandmooduliks

Siiani on objekti loomise kood teie töövihikurakenduses. Kui soovite aga oma objekti teiste arendajatega või teiste Exceli rakendustega jagada, saate selle muuta lisandmooduliks

Selleks piisab faili salvestamisest lisandmoodulina. Valige Fail | Salvesta nimega ja ilmub brauseriaken

Valige failitüübi rippmenüüst failitüüp lisandmoodulina (.xlam) ja klõpsake nuppu OK. Fail salvestatakse vaikimisi kausta Lisandmoodul, kuid saate asukohta muuta.

Seejärel saate lisandmooduli faili oma Exceli rakendustesse lisada, andes teile paindlikkuse oma uue objekti kasutamiseks

Uue lisandmooduli lisamiseks Excelisse klõpsake Exceli lindil nuppu Fail ja seejärel vasakpoolsel paanil all asuvat suvandit

Klõpsake kuvatava hüpikakna vasakpoolsel paanil nuppu „Lisandmoodulid”. Akna allservas on nupp „Mine”

Klõpsake seda ja ilmub hüpikaken „Lisandmoodul”. Klõpsake nuppu „Sirvi” ja leidke oma lisandmooduli fail. Seejärel saate oma koodis oma objektile viidata.

Te aitate arengu ala, jagades leht oma sõpradega

wave wave wave wave wave