AaVBA - nav BB

Šī apmācība iemācīs jums par klases moduļiem VBA. Jūs uzzināsit, kas tie ir un kā tos izmantot.

VBA klases moduļi - ievads

Ievietojot moduļus Visual Basic Editor (VBE), lai ievadītu savu kodu, iespējams, pamanījāt, ka varat ievietot arī tā saukto “klases moduli”.

Klases moduļi pret moduļiem

Klases moduļi darbojas ļoti atšķirīgi no parastajiem moduļiem, jo ​​tie atvieglo komponenta objekta modeļa (COM) izveidi, ko pēc tam var izmantot jūsu parastajā VBA kodā

Efektīvi jūs izveidojat objektu, kas darbojas tāpat kā iebūvēts Excel objekts, piemēram, “Darblapas”. Objektā Darblapas ir vairāki rekvizīti un metodes, kas ļauj iegūt darblapu darblapu skaitu vai katru darblapas atsevišķu nosaukumu vai daudz citu informāciju

Šādā veidā veidojot jaunu objektu, jūs veidojat celtniecības bloku, ko var izmantot jebkurā VBA vietā. Objektam ir vairāki rekvizīti un metodes, kurām var piekļūt, izmantojot jūsu VBA kodu no jebkuras vietas darbgrāmatā, nepārtraucot koda atkārtotu rakstīšanu.

Kā arī atsaucoties uz savu jauno objektu no standarta VBA moduļa, varat to izmantot arī kodā aiz UserForm, kas ir daļa no jūsu pielāgotās lietojumprogrammas

Varat to izmantot arī vietās, kur darblapā esat ievietojis Active X vadīklas, piemēram, komandu pogu vai nolaižamo izvēlni. Visas šīs vadīklas izmanto VBA, un jūsu jauno objektu var viegli iekļaut šo vadīklu notikumu kodā.

Varat arī pārvērst savu objektu par Excel pievienojumprogrammu. Jūsu objekts automātiski būs pieejams citiem lietotājiem, kuriem šī pievienojumprogramma ir ielādēta. Tādējādi jūsu Excel lietojumprogrammai tiek pievienota jūsu daudzpakāpju arhitektūra

Excel ir daudzpakāpju lietojumprogramma. Pastāv klientu pakalpojumu slānis, kas vada faktisko darblapas logu, kas lietotājam ir pazīstams. Excel objekta modelis ir nākamais slānis zem tā. Nospiediet F2 VBA modulī, un jūs varēsit redzēt milzīgo objektu skaitu un to objektu dalībniekus, kas ir Excel dzinējs. Ņemiet vērā, ka šeit tiks parādīts arī jūsu jaunais objekts.

Visbeidzot, zem tā visa ir datu pakalpojumu slānis, kurā atrodas visi darblapās un šūnās ievadītie dati. Excel tam piekļūst, izmantojot Excel objekta modeli.

Izveidojot klases moduli, varat paplašināt Excel objektu moduli ar saviem pielāgotajiem objektiem un dalībniekiem

Šajā rakstā ir paskaidrots, kā izveidot vienkāršu objektu hierarhiju, izmantojot klases moduļus.

Klases moduļu izmantošanas priekšrocības

  1. Jūs varat izveidot stabilu celtniecības bloku, ko var izmantot daudzās dažādās Excel lietojumprogrammās
  2. Kad tas ir rūpīgi pārbaudīts, uz to var paļauties, lai vienmēr iegūtu pareizos rezultātus tāpat kā iebūvētajos Excel objektos
  3. Ja kods tiek atjaunināts citur lietojumprogrammā, jaunais objekts joprojām turpinās darboties tādā pašā veidā
  4. Jauno objektu varat izmantot citās Excel lietojumprogrammās kā pievienojumprogrammu
  5. Objektus var atkārtoti izmantot citās lietojumprogrammās un palīdz atkļūdošanā

Klases moduļu izmantošanas trūkumi

  1. Tos var būt grūti izveidot un saprast.
  2. Piešķiršanas noteikumi ir ļoti svarīgi, jo tas ir tas, ko redzēsit, izmantojot savu objektu parastajā modulī.
  3. Ja iepriekš neesat izveidojis klases moduli, tos var būt grūti saprast, un ir stāva mācīšanās līkne
  4. Izpildes laikā nav iespējams veikt izmaiņas-jums ir jāiestata projekts no jauna.
  5. Ja rekvizītiem un privātajiem mainīgajiem ir vienāds nosaukums, var rasties bezgalīgas cilpas, kā rezultātā rodas kļūdas

Klases moduļa ievietošana

Atlasiet Ievietot | Klases modulis no VBE (Visual Basic Editor) izvēlnes. Jaunais klases modulis automātiski tiks saukts par “1. klasi”, taču tas nekavējoties jāmaina uz nosaukumu, kuru izmantosit savam objektam

Jūs maināt nosaukumu rekvizītu logā, uz kuru norāda bultiņa. Vienkārši ierakstiet savu jauno vārdu, un tas mainīsies kolekcijā Klases moduļi

Ja logs Rekvizīti nav redzams, atlasiet Skatīt | Rekvizīti izvēlnē VBE vai nospiediet F4

Zvaniet savam jaunajam klases modulim “MyItem” un veiciet dubultklikšķi uz nosaukuma koka skatā Project Explorer, lai parādītu tā koda logu.

Objekta vienuma izveide

Šis piemērs izveidos augstākā līmeņa objektu ar nosaukumu “MyItems” ar dalībnieka objektu zem tā ar nosaukumu “MyItem”, kurā tiks glabāti katra vienuma individuālie dati. Kad tas ir izveidots, tas darbosies tāpat kā iebūvēts Excel objekts. Piemēram, ir objekts ar nosaukumu “Darblapas”, kas ir katras darbgrāmatas darblapas kolekcija. Ir arī objekts ar nosaukumu “Lapa”, kas attēlo katru darbgrāmatas atsevišķo darblapu un satur visas katras darblapas īpašības un metodes. Šis objekts attiecas uz kolekcijas objektu “Darblapas”.

Varat atkārtot kolekciju “Darblapas”, apskatot katru “Lapu” pēc kārtas. Tādā pašā veidā jūs varēsit atkārtot kolekciju “MyItems”, apskatot rekvizītus, kurus izveidojāt “Myitem” dalībniekā.

Pirmā lieta, kas jādara, ir izveidot apakšobjektu dalībnieka līmenim, kurā atradīsies faktiskie vienumi augstākā līmeņa objekta kolekcijā. Tas ir ekvivalents dalībniekiem (piemēram, vārds, redzams, skaits) Excel programmā “Sheet”. Šis kods tiek ievadīts klases modulī ar nosaukumu “MyItem”

Klases moduļiem ir īpašības un metodes. Rekvizīti faktiski ir līdzīgi mainīgajiem, jo ​​tiem ir tādas datu vērtības kā mainīgie, un Metodes ir kā apakšrutīnas vai funkcijas.

Apakšobjektā mēs izveidosim objektam divus rekvizītus - vienumu un detaļu

Sākotnēji ir jāpaziņo divi virkņu mainīgie, lai saglabātu rekvizītu vērtības:

12 Privāta mItem kā virknePrivāta mDetail kā virkne

Tie ir jāpaziņo sadaļā Deklarācijas klases moduļa koda augšdaļā, lai tos varētu izmantot visās moduļa apakšprogrammās

Viņiem jāpiešķir unikāli nosaukumi, lai tie atšķirtos no īpašumiem, kurus mēs izveidosim, tāpēc katra vārda priekšā ir likts “m” (dalībniekam).

Mainīgie tiek deklarēti kā privāti, tāpēc tos nevar redzēt neviens, izmantojot objektu. Tie ir darba mainīgie izmantošanai objekta kodā un nav tur kā gala objekta daļa.

Nākamais solis ir iestatīt kodu, lai dotu piekļuvi abiem īpašumiem. Jūs to darāt, izmantojot paziņojumu par īpašumu un īpašuma iegūšanu par katru īpašumu. Tiem jābūt publiskiem, pretējā gadījumā augstākā līmeņa objektam nebūs redzamu rekvizītu

123456789101112131415 Ļaut publiskajam īpašumam (vdata kā virkne)mItem = vdataBeigu īpašumsPubliskais īpašums Iegūt vienumu () kā virkniVienums = mItemBeigu īpašumsInformācija par publisko īpašumu (vdata kā virkne)mDetail = vdataBeigu īpašumsPubliskais īpašums Detalizēti () kā virkneDetail = mDetailBeigu īpašums

Šis kods rada līdzekļus, lai nolasītu un ierakstītu vērtības abos rekvizītos (vienums un detaļa), izmantojot divus privātos mainīgos, kas tika definēti moduļa deklarāciju sadaļā.

Parametru “vdata” izmanto, lai nodotu datus attiecīgajam īpašumam.

Ir svarīgi, lai katram īpašumam būtu paziņojums “Ļaut” un “Iegūt” un lai īpašuma nosaukums katrā gadījumā būtu vienāds. Nepareizas uzrakstīšanas gadījumā jūs varētu iegūt divus dažādus rekvizītus - vienu, no kura varat lasīt, un otru, uz kuru varat rakstīt!

Lai palīdzētu izveidot šo kodu, varat izmantot Ievietot | Procedūra VBE izvēlnē, lai izveidotu koda skeletu, kas izveidos sākotnējo kodu īpašībām “Get” un “Let” noteiktam rekvizīta nosaukumam

Tiks parādīts uznirstošais logs, kurā ierakstīsit rekvizīta nosaukumu un radio pogās atlasīsit “Īpašums”:

Noklikšķiniet uz "Labi", un skeleta kods tiks pievienots klases modulim:

1234567 Publiskais īpašums Iegūt MyProperty () kā variantuBeigu īpašumsPubliskais īpašums ļauj manam īpašumam (ByVal vNewValue kā variants)Beigu īpašums

Tas novērš kļūdas īpašumu nosaukumos. Jūs vienkārši pievienojat savu kodu starp paziņojumiem “Publiskais īpašums” un “Gala īpašums”.

Tagad jums ir objekts ar nosaukumu “MyItem”, kurā būs visi šī uzdevuma dati.

Vai esat noguris no VBA koda piemēru meklēšanas? Izmēģiniet AutoMacro!

Kolekcijas izveide

Nākamais posms ir izveidot augstākā līmeņa objektu kā kolekcijas objektu, lai dotu piekļuvi rekvizītiem, kurus esat iestatījis objektā “MyItem”.

Atkal jums ir jādefinē darba objekts, lai tas darbotos kā kolekcijas objekts, tāpat kā jūs definējāt abus virkņu mainīgos objektā “MyItem”.

1 Privāti mItems kā kolekcija

Atkal tam ir jābūt unikālam nosaukumam, tāpēc vārda priekšā ir “m” (dalībnieka objekts), un tas tiek pasludināts arī par “privātu”, lai tas neparādītos jaunā objekta izveides laikā lietotas

Tālāk jums jāaizpilda kods Class_Initialize. Tas darbojas, kad pirmo reizi izmantojat objektu savā kodā, un tas nosaka, kādas vērtības tiks ielādētas objektā

Jūs varat piekļūt šai apakšprogrammai, moduļa loga pirmajā nolaižamajā izvēlnē atlasot “Klase” un otrajā nolaižamajā izvēlnē “Inicializēt”

12345678910 Privāta apakšklase_inicializēt ()Dim objItem Kā MyItemSet mItems = Jauna kolekcijaJa n = 1 līdz 3Iestatīt objItem = New MyItemobjItem.Item = Darblapas ("Sheet1"). Diapazons ("a" & n). VērtībaobjItem.Detail = Darblapas ("Sheet1"). Diapazons ("b" & n). VērtībamItems.Add objItemNākamais nBeigu apakš

Kods izveido objektu ar nosaukumu “objItem”, izmantojot “MyItem” definīciju, kuru iepriekš izveidojām kā klases moduli.

Pēc tam tas izveido jaunu kolekciju, pamatojoties uz iepriekš definēto objektu “mItems”

Tas atkārtojas, izmantojot darbgrāmatas 1. lapā esošās vērtības, un ievieto tās rekvizītos, kurus izveidojām objektam “MyItem”. Ņemiet vērā, ka, lietojot “objitem”, parādās nolaižamā izvēlne, kurā parādīti abi rekvizīti, tieši tā, it kā jūs izmantotu iebūvētu Excel objektu.

Pēc tam vienuma objekts tiek pievienots kolekcijas objektam, kurā tagad ir visi rekvizītu vērtību dati.

Ievades dati nav jāņem no darblapas. Tās var būt statiskas vērtības vai savienojums ar datu bāzi, piemēram, Microsoft Access vai SQL Server, vai arī no citas darblapas.

Pēc tam jums jāpievieno publiska funkcija ar nosaukumu “Vienums”

123 Publiskās funkcijas vienums (indekss kā vesels skaitlis) kā MyItemIestatīt vienumu = mItems.Item (indekss)Beigu funkcija

Tas ļauj atsaukties uz atsevišķiem kolekcijas objekta objektiem pēc to indeksa numura. Šī funkcija nodrošina “spoguli” tam, kas fonā notiek kolekcijā “mMyItems”.

Jums būs jāpievieno arī īpašums ar nosaukumu “Count”, lai jūsu kods varētu noteikt, cik “MyItem” objektu ir kolekcijā “MyItems”, ja vēlaties to atkārtot.

123 Publiskais īpašums tiek skaitīts () tik ilgiSkaits = mItems.CountBeigu īpašums

Šajā gadījumā jums ir nepieciešams tikai īpašums “Iegūt”, jo tas ir tikai lasāms. Tā izmanto kolekciju mItems, jo tajā jau ir iebūvēts skaitīšanas rekvizīts.

Tagad jums ir objekts (MyItems) ar pilnu hierarhiju, ko nosaka objekts “MyItem”

Lai viss darbotos, tagad jāaizpilda darblapa (lapa1) ar datiem, lai klases inicializācijas rutīna varētu to apkopot objektā

Jūsu izklājlapai vajadzētu izskatīties šādi:

Jaunā objekta izmantošana

Tagad savu kolekcijas objektu (MyItems) varat izmantot standarta Excel VBA modulī. Ievadiet šādu kodu:

12345678 Subtesta_objekts ()Dim MyClass kā jauni MyItems, n Kā vesels skaitlisMsgBox MyClass.CountJa n = 1 uz MyClass.CountMsgBox MyClass.Item (n) .ItemMsgBox MyClass.Item (n). Sīkāka informācijaNākamais nBeigu apakš

Šis kods izveido objektu ar nosaukumu “MyClass”, pamatojoties uz jūsu izveidoto kolekcijas objektu “MyItems”. Tas aktivizē rutīnas “Initialize” darbību, kas objektā izvelk visus datus no darblapas.

Tas parāda kolekcijas vienību skaitu un pēc tam atkārto kolekciju, parādot tekstu “Vienums” un “Detail”. Jūs ievērosiet, ka, atsaucoties uz kodu “MyClass”, jūs redzēsit divu dalībnieku rekvizītu sarakstu, kas palīdz pievienot pareizo īpašumu.

Ja maināt šūnas vērtību ievades datos izklājlapā, tā tiks automātiski atjaunināta kolekcijā, atkārtoti palaižot iepriekš minēto kodu, jo, izmērot objektu, tiek palaista inicializācijas kārtība un tiek uztverti visi jaunie dati

Ja jūs lietojat vārdu “Statisks”, nevis “Dim”, inicializācijas rutīna nedarbojas un vecās vērtības tiek saglabātas, kamēr kods darbojas nepārtraukti. Ja izklājlapas dati mainās, tas netiks atspoguļots objektā

1234567 Apakštests_statiskais ()Static Myclass As New MyItems, n Kā vesels skaitlisN = 1 līdz Myclass.CountMsgBox Myclass.Item (n) .ItemMsgBox Myclass.Item (n). Sīkāka informācijaNākamais nBeigu apakš

Kopsavilkums par objekta izveidi, izmantojot klases moduli

Kā redzējāt, klases moduļu hierarhijas izveide, ko izmantot kā objektu, ir diezgan sarežģīts bizness pat tik vienkāršai struktūrai kā šeit sniegtais piemērs. Kļūdu iespējas ir milzīgas!

Tomēr tam ir milzīgas priekšrocības, padarot jūsu kodu elegantāku un vieglāk lasāmu. To ir arī vieglāk koplietot ar citām Excel lietojumprogrammām un izstrādātājiem, pārvēršot to par pievienojumprogrammu.

Šajā piemērā, kā izveidot objektu datu glabāšanai, normāla pieeja būtu izveidot daudzdimensiju masīvu vairāku kolonnu izklājlapas datu glabāšanai, un jūs uzrakstītu koda rindiņu, lai atjauninātu vai izlasītu katru masīvs. Tas, iespējams, galu galā būtu diezgan netīrs, un, pievēršoties dažādiem elementiem, varētu tikt pieļautas kļūdas.

Izmantojot jauno objektu, varat vienkārši atsaukties uz to un dalībniekiem, kurus esat izveidojis zem tā, lai saglabātu datus.

Turklāt, ja izklājlapā (vai saistītā datu bāzē, ja esat to izmantojis kā datu avotu savā klases modulī) mainās dati, kad lietojat paziņojumu “Dim”, tiks izsaukta inicializācijas kārtība un dati tiks nekavējoties atjaunināti . Lai atkārtoti aizpildītu masīvu, nav jāraksta kods.

Klases moduļa izmantošana mainīga repozitorija izveidošanai

Rakstot VBA kodu, jūs visur izmantojat mainīgos lielumus, kuriem ir dažādas darbības jomas. Daži var tikt definēti tikai noteiktai procedūrai, daži - konkrētam modulim, un daži var būt globāli mainīgie, kurus var izmantot visā lietojumprogrammā

Jūs varat izveidot klases moduli, kurā būs liels mainīgo skaits, un, tā kā tas ir objekts, to var izmantot jebkur jūsu kodā, pat lietotāja veidlapā vai Active X vadīklā, kuru esat ievietojis darblapā.

Papildu priekšrocība ir tā, ka, atsaucoties uz savu mainīgo objektu, jūs redzēsit visu objektā esošo mainīgo nosaukumu sarakstu, kas sakārtots augošā secībā.

Lai izveidotu repozitoriju, jums jāievieto jauns klases modulis. To var izdarīt, izmantojot Ievietot | Klases modulis no VB redaktora izvēlnes

Mainiet nosaukumu uz “Mani mainīgie”, izmantojot to pašu metodoloģiju, kas iepriekš tika apspriesta šajā rakstā.

Ievadiet šādu kodu:

12345678910111213141516 Privāts mV kā variantsPubliskais īpašums Iegūt mainīgo1 () kā variantuMainīgais1 = mVBeigu īpašumsPubliskā īpašuma atļautais mainīgais1 (ByVal vNewValue kā variants)mV = vJauna vērtībaBeigu īpašumsPubliskais īpašums Iegūt mainīgo2 () kā variantuMainīgais1 = mVBeigu īpašumsPubliskais īpašums ļauj mainīgo2 (ByVal vNewValue kā variants)mV = vJauna vērtībaBeigu īpašums

Ar šo kodu tiek iestatīti rekvizīti “Ļaut” un “Iegūt” diviem mainīgajiem (“Mainīgais1” un “Mainīgais2”). Rekvizīti Ļaut un iegūt ir nepieciešami katram jūsu mainīgajam, lai tos varētu lasīt / rakstīt

Mainīgajiem varat izmantot savus nosaukumus, nevis paraugus šajā kodā, un varat pievienot citus mainīgos, pārliecinoties, ka katram jaunajam mainīgajam ir paziņojums “Ļaut” un “Iegūt”.

Mainīgā “mV” privātā deklarācija ir izveidot funkcionējošu mainīgo, kas tiek izmantots tikai klases modulī vērtību pārsūtīšanai.

Lai izmantotu mainīgo repozitoriju, standarta modulī ievadiet šādu kodu:

123456 Globālais VarRepo kā jauni mainīgieApakšpārbaudeVariableRepository ()MsgBox VarRepo. MainīgaisVarRepo. Mainīgais1 = 10MsgBox VarRepo. MainīgaisBeigu apakš

Šis kods izveido jūsu izveidotā objekta “MyVariables” globālu instanci. Šī deklarācija jums ir jāveic tikai vienu reizi no jebkuras vietas jūsu kodā.

Kods vispirms parāda “Mainīgā1” vērtību, lai parādītu, ka tas ir tukšs.

Mainīgajam 1 tiek piešķirta vērtība 10, un pēc tam tiek parādīta jaunā vērtība objektā, lai parādītu, ka šim īpašumam tagad ir šī vērtība.

Tā kā objekta “MyVariables” gadījums ir definēts globāli, jūs varat atsaukties uz jebkuru no definētajiem mainīgajiem objektā no jebkuras vietas kodā.

Tam ir milzīga priekšrocība, jo, ja vēlaties izmantot savus mainīgos jebkurā koda vietā, jums ir jānosaka tikai viens globālais mainīgais, un no šī gadījuma visi mainīgie var brīvi piekļūt un tikt mainīti visā jūsu kodā.

Lielisks produkts. AutoMacro ne tikai raksta jūsu kodu, bet arī māca jums ejot! " - Tonijs, Lielbritānija

Uzzināt vairāk

Izlasiet mūsu 900+ pārskatus

Objekta pārvēršana par pievienojumprogrammu

Līdz šim objekta izveides kods ir jūsu darbgrāmatas lietojumprogrammā. Tomēr, ja vēlaties kopīgot savu objektu ar citiem izstrādātājiem vai citām savām Excel lietojumprogrammām, varat to pārvērst par pievienojumprogrammu

Lai to izdarītu, viss, kas jānotiek, ir saglabāt failu kā pievienojumprogrammu. Atlasiet Fails | Saglabāt kā un parādīsies pārlūkprogrammas logs

Nolaižamajā faila tipā atlasiet faila tipu kā pievienojumprogramma (.xlam) un noklikšķiniet uz Labi. Pēc noklusējuma fails tiks saglabāts pievienojumprogrammas mapē, taču jūs varat mainīt atrašanās vietu.

Pēc tam pievienojumprogrammas failu varat iekļaut savās Excel lietojumprogrammās, nodrošinot elastību jaunā objekta izmantošanai

Lai iekļautu jauno pievienojumprogrammu programmā Excel, Excel lentē noklikšķiniet uz Fails un pēc tam noklikšķiniet uz Opcijas kreisās rūts apakšā

Parādītā uznirstošā loga kreisajā rūtī noklikšķiniet uz “Papildinājumi”. Loga apakšā ir poga ar atzīmi “Go”

Noklikšķiniet uz šī un parādīsies uznirstošais logs “Pievienot”. Noklikšķiniet uz “Pārlūkot” un pēc tam atrodiet pievienojumprogrammas failu. Pēc tam kodā varēsiet atsaukties uz savu objektu.

Jums palīdzēs attīstību vietā, daloties lapu ar draugiem

wave wave wave wave wave