AaVBA - Ei BB

Tämä opetusohjelma opettaa sinulle VBA -luokan moduuleista. Opit mitä ne ovat ja miten niitä käytetään.

VBA -luokan moduulit - Johdanto

Kun lisäät moduuleja Visual Basic Editoriin (VBE) koodin syöttämistä varten, olet ehkä huomannut, että voit lisätä myös niin kutsutun luokkamoduulin.

Luokan moduulit vs. moduulit

Luokan moduulit toimivat hyvin eri tavalla kuin tavalliset moduulit, koska ne helpottavat COM -komponenttiobjektimallin (COM) luomista, jota voidaan sitten käyttää normaalissa VBA -koodissasi

Käytännössä luot objektin, joka toimii samalla tavalla kuin sisäänrakennettu Excel -objekti, kuten "laskentataulukot". Työarkit -objektissa on useita ominaisuuksia ja menetelmiä, joiden avulla voit saada työkirjan sisältämien laskentataulukoiden määrän tai laskentataulukon yksittäisen nimen tai lukuisia muita tietoja

Kun luot uuden objektin tällä tavalla, luot rakennuspalikan, jota voidaan käyttää missä tahansa VBA: n sisällä. Objektilla on useita ominaisuuksia ja menetelmiä, joihin voit käyttää VBA-koodiasi mistä tahansa työkirjan kohdasta ilman, että joudut kirjoittamaan koodia uudelleen.

Sen lisäksi, että viitataan uuteen objektiin tavallisesta VBA -moduulista, voit käyttää sitä myös koodissa UserFormin takana, joka on osa mukautettua sovellustasi

Voit käyttää sitä myös silloin, kun olet asettanut Active X -ohjaimet laskentataulukkoon, kuten komentopainike tai pudotusvalikko. Kaikki nämä säätimet käyttävät VBA: ta, ja uusi objektisi voidaan helposti sisällyttää näiden ohjausobjektien tapahtumakoodiin.

Voit myös muuttaa objektisi Excel-apuohjelmaksi. Objektisi on automaattisesti muiden käyttäjien saatavilla, joille kyseinen lisäosa on ladattu. Tämä lisää oman monitasoisen arkkitehtuurin Excel-sovellukseesi

Excel on monitasoinen sovellus. On asiakaspalvelukerros, joka ajaa varsinaisen laskentataulukkoikkunan, jonka käyttäjä tuntee. Excel -objektimalli on seuraava taso alla. Paina F2 VBA -moduulissa, niin näet valtavan määrän kohteita ja niiden objektien jäseniä, jotka ovat Excelin moottori. Huomaa, että uusi objektisi näkyy myös täällä.

Lopuksi kaiken tämän alla on datapalvelukerros, joka sisältää kaikki laskentataulukoihin ja soluihin syöttämäsi tiedot. Excel käyttää tätä Excel -objektimalliin.

Luokkamoduulin luomisen avulla voit laajentaa Excel -objektimoduulin omilla mukautetuilla objekteilla ja jäsenillä

Tässä artikkelissa kerrotaan, kuinka voit luoda yksinkertaisen objektien hierarkian luokkamoduuleja käyttämällä.

Luokkamoduulien käytön edut

  1. Voit kehittää vankan rakennuspalikan, jota voidaan käyttää useissa eri Excel -sovelluksissa
  2. Kun se on testattu perusteellisesti, sen avulla voidaan aina tuottaa oikeat tulokset samalla tavalla kuin sisäänrakennetut Excel-objektit
  3. Jos koodia päivitetään muualla sovelluksessa, uusi objekti toimii edelleen samalla tavalla
  4. Voit käyttää uutta objektiasi muissa Excel-sovelluksissa apuohjelmana
  5. Objekteja voidaan käyttää uudelleen muissa sovelluksissa ja ne auttavat virheenkorjauksessa

Luokkamoduulien käytön haitat

  1. Niitä voi olla vaikea luoda ja ymmärtää.
  2. Nimeämiskäytännöt ovat erittäin tärkeitä, koska tämä näkyy, kun käytät objektiasi normaalimoduulissa.
  3. Jos et ole aiemmin luonut luokkamoduulia, niitä voi olla vaikea ymmärtää ja oppimiskäyrä on jyrkkä
  4. Mahdotonta tehdä muutoksia ajon aikana-sinun on asetettava projekti uudelleen.
  5. Jos ominaisuuksilla ja yksityismuuttujilla on sama nimi, voi esiintyä äärettömiä silmukoita, jotka johtavat virheisiin

Luokkamoduulin lisääminen

Valitse Lisää | Luokan moduuli VBE (Visual Basic Editor) -valikosta. Uutta luokkamoduulia kutsutaan automaattisesti luokkaa 1, mutta se on muutettava välittömästi nimeksi, jota aiot käyttää objektillesi

Voit muuttaa nimen Ominaisuudet -ikkunassa, johon nuoli osoittaa. Kirjoitat vain uuden nimesi, ja tämä muuttuu Class Modules -kokoelmassa

Jos Ominaisuudet -ikkuna ei ole näkyvissä, valitse Näytä | Ominaisuudet VBE -valikossa tai paina F4

Soita uudelle luokkamoduulille "MyItem" ja kaksoisnapsauta nimeä Project Explorerin puunäkymässä näyttääksesi sen koodi-ikkunan.

Objektikohteen luominen

Tämä esimerkki luo ylätason objektin nimeltä "MyItems", jonka alla on jäsenobjekti nimeltä "MyItem", joka säilyttää kunkin kohteen yksittäiset tiedot. Kun se on luotu, se toimii samalla tavalla kuin sisäänrakennettu Excel -objekti. Esimerkiksi on olemassa objekti nimeltä "Työarkit", joka on kokoelma työkirjasi jokaisesta laskentataulukosta. Siellä on myös "Sheet" -objekti, joka edustaa työkirjasi kutakin yksittäistä laskentataulukkoa ja sisältää kaikki laskentataulukon ominaisuudet ja menetelmät. Tämä kohde liittyy "Työarkit" -kokoelmaobjektiin.

Voit toistaa "Työlistat" -kokoelman katsomalla jokaista "Arkkia" vuorotellen. Samalla tavalla voit toistaa "MyItems" -kokoelman katsomalla "Myitem" -jäsenessä luomiasi ominaisuuksia.

Ensimmäinen tehtävä on luoda alitason objekti jäsentasolle, joka pitää ylätason objektin kokoelman varsinaiset kohteet. Tämä vastaa jäseniä (esim. Nimi, näkyvä, määrä) Excelin Sheet -objektissa. Tämä koodi syötetään luokkamoduuliin nimeltä MyItem

Luokkamoduuleilla on ominaisuuksia ja menetelmiä. Ominaisuudet ovat tehokkaasti muuttujien kaltaisia, koska niissä on datan arvoja, kuten muuttujia, ja metodit ovat kuin alirutiinit tai funktiot.

Aliobjektissa aiomme luoda objektille kaksi ominaisuutta - kohde ja yksityiskohta

Aluksi kaksi merkkijonomuuttujaa on ilmoitettava ominaisuuksien arvojen säilyttämiseksi:

12 Yksityinen mItem merkkijononaYksityinen mDetail merkkijonona

Nämä on ilmoitettava luokan moduulin koodin yläosassa olevassa Ilmoitukset -osiossa, jotta niitä voidaan käyttää kaikissa moduuleissa

Heille on annettava yksilöllisiä nimiä, jotta ne eroaisivat luoduistamme ominaisuuksista, joten jokaisen nimen eteen on asetettu m (jäsen).

Muuttujat julistetaan yksityisiksi, joten kukaan ei voi nähdä niitä, jotka käyttävät objektia. Ne ovat muuttujia, joita voidaan käyttää objektikoodin sisällä, eivätkä ne ole osana lopullista objektia.

Seuraava vaihe on määrittää koodi, joka antaa pääsyn kahteen ominaisuuteen. Voit tehdä tämän käyttämällä kiinteistön vuokrausta ja kiinteistön hankintalausuntoa jokaisesta kiinteistöstä. Näiden on oltava julkisia, muuten ylätason objektilla ei ole näkyviä ominaisuuksia

123456789101112131415 Julkisen omaisuuden Let -kohde (vdata merkkijonona)mItem = vdataLopeta omaisuusJulkinen omaisuus Hae kohde () merkkijononaTuote = mItemLopeta omaisuusJulkisen omaisuuden vuokraustiedot (vdata merkkijonona)mDetail = vdataLopeta omaisuusJulkinen omaisuus Hae tiedot () merkkijononaYksityiskohta = mDetailLopeta omaisuus

Tämä koodi luo keinot lukea ja kirjoittaa arvoja molemmille ominaisuuksille (kohde ja yksityiskohta) käyttämällä kahta yksityistä muuttujaa, jotka on määritetty moduulin ilmoitusosassa.

Vdata -parametria käytetään välittämään tietoja kyseiselle omaisuudelle.

On tärkeää, että jokaisella omaisuudella on Let- ja Get -lause ja että ominaisuuden nimi on sama kaikissa tapauksissa. Jos kirjoitat väärin, sinulla voi olla kaksi eri ominaisuutta - yksi, josta voit lukea ja toinen, jolle voit kirjoittaa!

Voit auttaa tämän koodin luomisessa käyttämällä Lisää | Menettely VBE -valikossa koodirungon luomiseksi, joka luo alkuperäisen koodin Get- ja Let -ominaisuuksille tietylle ominaisuuden nimelle

Tämä näyttää ponnahdusikkunan, johon kirjoitat ominaisuuden nimen ja valitset valintanappien "Ominaisuus":

Napsauta OK ja luuranko koodi lisätään luokkamoduuliin:

1234567 Julkinen omaisuus Hanki MyProperty () vaihtoehtonaLopeta omaisuusJulkinen omaisuus Anna MyProperty (ByVal vNewValue as Variant)Lopeta omaisuus

Tämä estää virheet ominaisuuksien nimissä. Sinun tarvitsee vain lisätä koodi "Public Property" ja "End Property" -lausekkeiden väliin.

Sinulla on nyt objekti nimeltä "MyItem", joka sisältää kaikki tämän harjoituksen tiedot.

Oletko kyllästynyt etsimään esimerkkejä VBA -koodista? Kokeile AutoMacroa!

Kokoelman luominen

Seuraava vaihe on luoda ylätason objekti kokoelmaobjektiksi, jotta pääset käsiksi ominaisuuksiin, jotka olet määrittänyt MyItem-objektissa

Jälleen sinun on määritettävä toimiva objekti toimimaan kokoelmaobjektina samalla tavalla kuin määritit kaksi merkkijonomuuttujaa "MyItem" -objektissa.

1 Yksityiset mItems kokoelmana

Jälleen tällä on oltava ainutlaatuinen nimi, minkä vuoksi nimen edessä on m (jäsenobjekti), ja se julistetaan myös yksityiseksi, jotta se ei näy uuden objektin käytetty

Seuraavaksi sinun on täytettävä Class_Initialize -koodi. Tämä suoritetaan, kun käytät objektia ensimmäistä kertaa koodissasi, ja se määrittää, mitkä arvot ladataan objektiin

Voit käyttää tätä alirutiinia valitsemalla 'Luokka' ensimmäisestä pudotusvalikosta ja 'Alusta' moduuli -ikkunan toisesta avattavasta valikosta

12345678910 Yksityinen alaluokka_alku ()Dim objItem As MyItemAseta mItems = Uusi kokoelmaN = 1 - 3Aseta objItem = Uusi oma kohdeobjItem.Item = Laskentataulukot ("Sheet1"). Alue ("a" & n) .ArvoobjItem.Detail = Laskentataulukot ("Sheet1"). Alue ("b" & n) .ArvomItems.Add objItemSeuraava nEnd Sub

Koodi perustaa objektin nimeltä "objItem" käyttämällä määritelmää "MyItem", jonka rakensimme aiemmin luokkamoduulina.

Sitten se luo uuden kokoelman, joka perustuu aiemmin määritettyyn mItems -objektiin

Se toistaa työkirjan taulukossa 1 olevien arvojen kautta ja asettaa ne ominaisuuksiin, jotka loimme "MyItem" -objektille. Huomaa, että kun käytät objektia, näkyviin tulee pudotusvalikko, joka näyttää nämä kaksi ominaisuutta aivan kuin käyttäisit sisäänrakennettua Excel-objektia.

Kohdeobjekti lisätään sitten kokoelmaobjektiin, joka sisältää nyt kaikki tiedot ominaisuusarvoissa.

Syöttötietoja ei tarvitse ottaa laskentataulukosta. Se voi olla staattisia arvoja tai se voi olla yhteydessä tietokantaan, kuten Microsoft Accessiin tai SQL Serveriin, tai se voi tulla toisesta laskentataulukosta.

Sinun on sitten lisättävä julkinen toiminto nimeltä "kohde"

123 Julkisen toiminnon kohde (indeksi kokonaislukuna) nimellä MyItemAseta kohde = mItems.Item (hakemisto)Lopeta toiminto

Tämän avulla voit viitata yksittäisiin esineisiin kokoelmaobjektissa niiden indeksinumeron perusteella. Tämä toiminto tarjoaa "peilin" taustalla olevan "mMyItems" -kokoelman tapahtumista.

Sinun on myös lisättävä ominaisuus nimeltä Count, jotta koodisi voi määrittää, kuinka monta MyItem -objektia on MyItems -kokoelmassa, jos haluat toistaa sen.

123 Julkisen omaisuuden laskeminen () niin kauanCount = mItems.CountLopeta omaisuus

Tässä tapauksessa tarvitset vain Get-ominaisuuden, koska se on vain luku. Se käyttää mItems -kokoelmaa, koska tässä on jo laskentaominaisuus.

Sinulla on nyt objekti (MyItems), jolla on täydellinen hierarkia, jonka objekti "MyItem" määrittelee

Jotta koko asia toimisi, sinun on nyt täytettävä laskentataulukko (Sheet1) tiedoilla, jotta Class Initialize -rutiini voi kerätä tämän objektiin

Laskentataulukon pitäisi näyttää tältä:

Uuden objektin käyttäminen

Voit nyt käyttää kokoelmaobjektiasi (MyItems) tavallisessa Excel VBA -moduulissa. Syötä seuraava koodi:

12345678 Alitesti_objekti ()Himmennä MyClass kuin uudet MyItems, n kokonaislukunaMsgBox MyClass.CountJos n = 1 MyClass.CountMsgBox MyClass.Item (n) .ItemMsgBox MyClass.Item (n)Seuraava nEnd Sub

Tämä koodi luo "MyClass" -objektin luomasi kokoelmaobjektin "MyItems" perusteella. Tämä käynnistää "Initialize" -rutiinin, joka poimii kaikki laskentataulukon tiedot objektiin.

Se näyttää kokoelman kohteiden lukumäärän ja sitten selaa kokoelmaa, jossa näkyy "kohde" ja "yksityiskohta" teksti. Huomaat, että kun viittaat koodissasi olevaan "MyClass" -objektiin, näet luettelon kahdesta jäsenominaisuudesta, jotka auttavat oikean ominaisuuden lisäämisessä.

Jos muutat laskentataulukon syötetiedon solun arvoa, se päivitetään automaattisesti kokoelmaan, kun suoritat yllä olevan koodin uudelleen, koska kun mitoitat objektin, alustusrutiini suoritetaan ja kerää kaikki uudet tiedot

Jos käytät sanaa "Staattinen" "Dim" sijasta, alustusrutiini ei toimi ja vanhat arvot säilytetään niin kauan kuin koodi on jatkuvasti käynnissä. Jos laskentataulukon tiedot muuttuvat, tämä ei heijastu objektiin

1234567 Sub Test_Static ()Staattinen Myclass kuin uudet MyItems, n kokonaislukunaJos n = 1 Myclass.CountMsgBox Myclass.Item (n) .ItemMsgBox Myclass.Item (n)Seuraava nEnd Sub

Yhteenveto objektin luomisesta luokkamoduulin avulla

Kuten olet nähnyt, luokkamoduulien hierarkian luominen käytettäväksi objekteina on melko monimutkainen asia, vaikka rakenne olisi yhtä yksinkertainen kuin tässä esitetty esimerkki. Virheiden tekemisen mahdollisuudet ovat valtavat!

Sillä on kuitenkin valtavia etuja, koska se tekee koodistasi tyylikkäämmän ja helpommin luettavan. Se on myös helpompi jakaa muiden Excel-sovellusten ja -kehittäjien kanssa muuttamalla se apuohjelmaksi.

Tässä esimerkissä siitä, miten luodaan objekti tietojen säilyttämiseksi, olisi normaali tapa luoda moniulotteinen taulukko monisarakkeisten laskentataulukkotietojen säilyttämiseksi, ja kirjoitat koodirivin päivittääksesi tai lukemaan jokaisen elementin taulukko. Tämä olisi todennäköisesti melko sotkuista, ja virheitä voitaisiin helposti tehdä käsiteltäessä eri elementtejä.

Uuden objektisi avulla voit yksinkertaisesti viitata siihen ja sen alle luomiin jäseniin tietojen säilyttämiseksi.

Lisäksi, jos tiedot muuttuvat laskentataulukossa (tai linkitetyssä tietokannassa, jos olet käyttänyt tätä tietolähteenä luokka -moduulissasi) aina, kun käytät Dim -käskyä, alustusrutiini kutsutaan ja tiedot päivitetään välittömästi . Sinun ei tarvitse kirjoittaa koodia taulukon täyttämiseksi uudelleen.

Luokka -moduulin käyttäminen muuttuva -arkiston luomiseen

Kun kirjoitat VBA -koodia, käytät muuttujia kaikkialla, kaikilla eri laajuuksilla. Jotkut voidaan määrittää vain tiettyä menettelyä varten, jotkut tiettyä moduulia varten, ja jotkut voivat olla globaaleja muuttujia, joita voidaan käyttää koko sovelluksessa

Voit luoda luokkamoduulin, joka sisältää suuren määrän muuttujia, ja koska se on objekti, sitä voidaan käyttää missä tahansa koodisi sisällä, myös käyttäjälomakkeessa tai Active X -ohjaimessa, jonka olet asettanut laskentataulukkoon.

Lisäetuna on, että kun viittaat muuttuvaan objektiisi, näet luettelon kaikista objektissa olevista muuttujien nimistä nousevassa järjestyksessä.

Jos haluat luoda arkiston, sinun on lisättävä uusi luokkamoduuli. Voit tehdä tämän käyttämällä Insert | Luokka -moduuli VB Editor -valikosta

Vaihda nimeksi "MyVariables" käyttämällä samaa menetelmää kuin tässä artikkelissa aiemmin keskusteltiin.

Syötä seuraava koodi:

12345678910111213141516 Yksityinen mV VaihtoehtonaJulkinen omaisuus Hanki muuttuja1 () vaihtoehtonaMuuttuja1 = mVLopeta omaisuusJulkisen omaisuuden kerroksen muuttuja1 (ByVal vNewValue as Variant)mV = v Uusi arvoLopeta omaisuusJulkinen omaisuus Hanki muuttuja2 () vaihtoehtonaMuuttuja1 = mVLopeta omaisuusJulkisen omaisuuden Let Variable2 (ByVal vNewValue As Variant)mV = v Uusi arvoLopeta omaisuus

Tämä koodi määrittää Let- ja Get -ominaisuudet kahdelle muuttujalle ("Variable1" ja "Variable2"). Let and Get -ominaisuudet vaaditaan jokaiselle muuttujallesi, jotta ne luetaan / kirjoitetaan

Voit käyttää muuttujien omia nimiä tämän koodin esimerkkien sijasta ja lisätä muita muuttujia varmistaen, että jokaisella uudella muuttujalla on Let- ja Get -lause.

Muuttujan mV yksityisilmoituksen tarkoituksena on luoda toimiva muuttuja, jota käytetään vain luokkamoduulissa arvojen siirtämiseen.

Jos haluat käyttää muuttujavarastoa, syötä seuraava koodi vakiomoduuliin:

123456 Globaali VarRepo uusina muuttujinaAlatestiVariableRepository ()MsgBox VarRepo.Variable 1VarRepo.Variable1 = 10MsgBox VarRepo.Variable 1End Sub

Tämä koodi luo luomasi "MyVariables" -objektin maailmanlaajuisen esiintymän. Sinun on tehtävä tämä ilmoitus vain kerran mistä tahansa koodisi sisällä.

Koodi näyttää ensin muuttujan1 arvon osoittaakseen, että se on tyhjä.

Muuttuja1: lle annetaan arvo 10 ja objektin uusi arvo näytetään sen jälkeen osoittamaan, että tällä ominaisuudella on nyt tämä arvo.

Koska "MyVariables" -objektin esiintymä on määritetty maailmanlaajuisesti, voit viitata mihin tahansa objektin määritettyyn muuttujaan missä tahansa koodisi sisällä.

Tällä on valtava etu siinä mielessä, että jos haluat käyttää muuttujasi missä tahansa koodissasi, sinun on määritettävä vain yksi globaali muuttuja, ja siitä lähtien kaikki muuttujat ovat vapaasti käytettävissä ja muokattavissa koko koodisi ajan.

Suuri tuote. AutoMacro ei vain kirjoita koodiasi, se opettaa aina! " - Tony, Iso -Britannia

Lue lisää

Lue yli 900 arvostelua

Objektin muuttaminen apuohjelmaksi

Toistaiseksi objektin luomisen koodi on työkirjasovelluksessasi. Jos haluat kuitenkin jakaa objektisi muiden kehittäjien tai muiden Excel-sovellusten kanssa, voit muuttaa sen apuohjelmaksi

Tätä varten sinun tarvitsee vain tallentaa tiedosto apuohjelmana. Valitse Tiedosto | Tallenna nimellä ja selainikkuna tulee näkyviin

Valitse tiedostotyypiksi avattavasta tiedostotyypistä apuohjelma (.xlam) ja napsauta OK. Tiedosto tallennetaan oletuksena Apuohjelma-kansioon, mutta voit muuttaa sijaintia.

Tämän jälkeen voit sisällyttää apuohjelmatiedoston Excel-sovelluksiisi, jolloin saat joustavasti uuden objektin käytön

Jos haluat sisällyttää uuden apuohjelmasi Exceliin, napsauta Excel-valintanauhan Tiedosto-kohtaa ja valitse sitten vasemmanpuoleisen ruudun alaosassa Asetukset

Napsauta näkyviin tulevan ponnahdusikkunan vasemmanpuoleisessa ruudussa Lisäosia. Ikkunan alareunassa on painike "Siirry"

Napsauta tätä ja "Lisäosa" -ponnahdusikkuna tulee näkyviin. Napsauta "Selaa" ja etsi sitten apuohjelmatiedosto. Voit sitten viitata objektiisi koodissasi.

Tulet auttaa kehittämään sivuston jakaminen sivu ystävillesi

wave wave wave wave wave