Tutorial și exemple pentru modulul de clasă VBA

Acest tutorial vă va învăța despre modulele de clasă din VBA. Veți afla ce sunt și cum să le folosiți.

Module de clasă VBA - Introducere

Când introduceți module în Visual Basic Editor (VBE) pentru a vă introduce codul, este posibil să fi observat că puteți introduce și ceea ce se numește un „Modul de clasă”.

Module de clasă vs. Module

Modulele de clasă funcționează într-un mod foarte diferit de modulele obișnuite, deoarece facilitează crearea unui model de obiect component (COM) care poate fi apoi utilizat în codul dvs. VBA normal

Efectiv, creați un obiect care funcționează la fel ca un obiect Excel încorporat, cum ar fi „Foi de lucru”. În Obiectul foi de lucru, aveți o serie de proprietăți și metode care vă permit să obțineți numărul de foi de lucru într-un registru de lucru sau fiecare nume individual al unei foi de lucru sau numeroase alte informații

Când creați un nou obiect în acest fel, creați un bloc care poate fi utilizat oriunde în VBA. Obiectul are o serie de proprietăți și metode care pot fi accesate de codul dvs. VBA de oriunde din registrul de lucru, fără a fi nevoie să continuați să scrieți din nou codul.

Pe lângă faptul că faceți referire la noul dvs. obiect dintr-un modul VBA standard, îl puteți utiliza și în codul din spatele unui UserForm care face parte din aplicația dvs. personalizată

De asemenea, îl puteți utiliza acolo unde ați plasat comenzile Active X pe o foaie de lucru, cum ar fi un buton de comandă sau un meniu derulant. Toate aceste controale utilizează VBA, iar noul dvs. obiect poate fi ușor încorporat în codul evenimentului pentru aceste controale.

De asemenea, vă puteți transforma obiectul într-un program de completare Excel. Obiectul dvs. va fi disponibil automat pentru alți utilizatori care au încărcat acel supliment. Aceasta adaugă propria dvs. arhitectură pe mai multe niveluri aplicației dvs. Excel

Excel este o aplicație cu mai multe niveluri. Există stratul de servicii pentru clienți, care conduce fereastra de foaie de lucru cu care utilizatorul este familiarizat. Modelul de obiecte Excel este următorul strat de dedesubt. Apăsați F2 într-un modul VBA și veți putea vedea numărul mare de obiecte și membri ai acelor obiecte care sunt motorul Excel. Rețineți că noul dvs. obiect va fi afișat și aici.

În cele din urmă, sub toate acestea, aveți stratul de servicii de date care conține toate datele pe care le-ați introdus în foi de lucru și celule. Excel accesează acest lucru folosind modelul Excel Object.

Crearea unui modul de clasă vă permite să extindeți modulul de obiecte Excel cu propriile obiecte și membri personalizați

Acest articol vă explică cum puteți crea o ierarhie simplă a obiectelor utilizând Module de clasă.

Avantajele utilizării modulelor de clasă

  1. Puteți dezvolta un bloc solid care poate fi utilizat în orice număr de aplicații Excel diferite
  2. Odată ce este testat temeinic, atunci se poate baza pe acesta pentru a produce întotdeauna rezultatele corecte în același mod ca și obiectele Excel încorporate
  3. Dacă se fac actualizări ale codului în altă parte a aplicației, noul obiect va continua să funcționeze în același mod
  4. Puteți utiliza noul dvs. obiect în alte aplicații Excel ca supliment
  5. Obiectele pot fi refolosite în alte aplicații și ajută la depanare

Dezavantaje ale utilizării modulelor de clasă

  1. Pot fi dificil de creat și înțeles.
  2. Convențiile de denumire sunt foarte importante, deoarece acest lucru veți vedea când utilizați obiectul într-un modul normal.
  3. Dacă nu ați creat anterior un modul de clasă, acestea pot fi dificil de înțeles și există o curbă de învățare abruptă
  4. Imposibil de efectuat modificări în timpul rulării - trebuie să restabiliți proiectul.
  5. Dacă Proprietățile și Variabilele private au același nume, atunci pot apărea bucle infinite, rezultând erori

Introducerea unui modul de clasă

Selectați Inserare | Modul de clasă din meniul VBE (Visual Basic Editor). Noul modul de clasă se va numi automat „Clasa 1”, dar acest lucru trebuie schimbat imediat cu numele pe care îl veți folosi pentru obiectul dvs.

Schimbați numele în fereastra Proprietăți către care indică săgeata. Pur și simplu introduceți noul dvs. nume, iar acest lucru se va schimba în colecția Module de clasă

Dacă fereastra Proprietăți nu este vizibilă, selectați Vizualizare | Proprietăți din meniul VBE sau apăsați F4

Apelați noul dvs. modul de clasă „MyItem” și faceți dublu clic pe numele din arborescența din Project Explorer pentru a afișa fereastra de cod pentru acesta.

Crearea unui obiect obiect

Acest exemplu va crea un obiect de nivel superior numit „MyItems” cu un obiect membru sub acesta numit „MyItem” care va conține datele individuale pentru fiecare articol. Odată creat, va funcționa în același mod ca un obiect Excel încorporat. De exemplu, există un obiect numit „Foi de lucru”, care este o colecție a fiecărei foi de lucru din registrul dvs. de lucru. Există, de asemenea, un obiect numit „Foaie” care reprezintă fiecare foaie de lucru individuală în registrul dvs. de lucru și care deține toate proprietățile și metodele pentru fiecare foaie de lucru. Acest obiect se referă la obiectul de colecție „Foi de lucru”.

Puteți itera prin colecția „Foi de lucru”, vizualizând pe rând fiecare „Foaie”. În același mod, veți putea itera prin colecția „MyItems” afișând proprietățile pe care le-ați creat în membrul „Myitem”.

Primul lucru de făcut este să creați subobiectul pentru nivelul de membru care va deține obiectele reale din colecția obiectului de nivel superior. Acesta este echivalentul membrilor (de exemplu, nume, vizibil, număr) din obiectul „Foaie” din Excel. Acest cod este introdus în modulul de clasă numit „MyItem”

Modulele de clasă au Proprietăți și Metode. Proprietățile sunt efectiv asemănătoare variabilelor, prin faptul că dețin valori ale datelor precum variabilele, iar metodele sunt ca niște sub rutine sau funcții.

În sub-obiect vom crea două proprietăți pentru obiect - Item și Detail

Inițial trebuie să fie declarate două variabile șir pentru a păstra valorile pentru proprietăți:

12 MItem privat ca șirPrivate mDetail As String

Acestea trebuie declarate în secțiunea Declarații din partea de sus a codului pentru modulul de clasă, astfel încât să poată fi utilizate în toate rutinele secundare din modul.

Trebuie să li se dea nume unice pentru a le face diferite de proprietățile pe care urmează să le creăm, așa că un „m” (pentru membru) a fost pus în fața fiecărui nume.

Variabilele sunt declarate private, deci nu pot fi văzute de nimeni care folosește obiectul. Acestea sunt variabile de lucru pentru a fi utilizate în codul obiectului și nu sunt acolo ca parte a obiectului final.

Următorul pas este să configurați codul pentru a da acces la cele două proprietăți. Faceți acest lucru prin intermediul unei Let Property și a unei declarații Property Get pentru fiecare proprietate. Acestea trebuie să fie publice, altfel obiectul de nivel superior nu va avea proprietăți vizibile

123456789101112131415 Proprietatea publică Permite articol (vdata ca șir)mItem = vdataProprietate finalăProprietatea publică Obține articolul () ca șirItem = mItemProprietate finalăProprietatea publică să fie detaliată (vdata ca șir)mDetail = vdataProprietate finalăProprietatea publică Obține detalii () ca șirDetail = mDetailProprietate finală

Acest cod creează mijloacele de a citi și scrie valori la cele două proprietăți (Item și Detail) folosind cele două variabile private care au fost definite în secțiunea de declarații a modulului.

Parametrul „vdata” este utilizat pentru a transmite date proprietății în cauză.

Este important ca fiecare proprietate să aibă o declarație „Let” și „Get” și ca numele proprietății să fie același în fiecare caz. S-ar putea ajunge cu două proprietăți diferite dacă este scris greșit - una din care poți citi și una în care poți scrie!

Pentru a ajuta la crearea acestui cod, puteți utiliza Insert | Procedură din meniul VBE pentru a crea un schelet de cod care va crea codul inițial pentru proprietățile „Obțineți” și „Lăsați” pentru un nume de proprietate dat

Aceasta va afișa o fereastră pop-up în care introduceți numele proprietății și selectați „Proprietate” pe butoanele radio:

Faceți clic pe „OK” și codul scheletului va fi adăugat în modulul clasei:

1234567 Proprietate publică Obțineți MyProperty () ca variantăProprietate finalăProprietatea publică permite MyProperty (ByVal vNewValue as Variant)Proprietate finală

Acest lucru previne orice greșeli asupra numelor proprietăților. Pur și simplu adăugați codul între instrucțiunile „Proprietate publică” și „Proprietate finală”.

Acum aveți un obiect numit „MyItem” care va conține toate datele pentru acest exercițiu.

V-ați săturat să căutați exemple de cod VBA? Încercați AutoMacro!

Crearea unei colecții

Următoarea etapă este de a crea un obiect de nivel superior ca obiect de colecție pentru a da acces la proprietățile pe care le-ați configurat în obiectul „MyItem”.

Din nou, trebuie să definiți un obiect de lucru care să acționeze ca obiect de colectare în același mod în care ați definit cele două variabile șir din obiectul „MyItem”.

1 Articole private ca colecție

Din nou, acest lucru trebuie să aibă un nume unic, motiv pentru care există un „m” (obiect membru) în fața numelui și este, de asemenea, declarat „Privat”, astfel încât să nu apară când noul obiect este folosit

Apoi, trebuie să completați codul Class_Initialize. Aceasta se execută atunci când utilizați pentru prima dată obiectul din codul dvs. și determină ce valori vor fi încărcate în obiect

Puteți accesa această sub rutină selectând „Clasă” în primul drop-down și „Initialize” în al doilea drop-down al ferestrei modulului

12345678910 Private Sub Class_Initialize ()Dim objectItem ca MyItemSet mItems = Colecție nouăPentru n = 1 până la 3Setați objItem = New MyItemobjItem.Item = Foi de lucru ("Sheet1"). Range ("a" & n). ValoareobjItem.Detail = Foi de lucru ("Sheet1"). Range ("b" & n). ValoaremItems.Add objItemUrmătorul nSfârșitul Sub

Codul configurează un obiect numit „objItem” folosind definiția „MyItem” pe care am construit-o mai devreme ca un modul de clasă.

Apoi creează o nouă colecție bazată pe obiectul „mItems” definit anterior

Iterează prin valorile deținute pe Sheet1 din registrul de lucru și le plasează în proprietățile pe care le-am creat pentru obiectul „MyItem”. Rețineți că atunci când utilizați „objitem”, apare o listă verticală care arată cele două proprietăți, exact ca și cum ați folosi un obiect Excel încorporat.

Obiectul articol este apoi adăugat în obiectul de colectare care deține acum toate datele din valorile proprietății.

Datele de intrare nu trebuie preluate dintr-o foaie de lucru. Ar putea fi valori statice sau ar putea proveni dintr-o conexiune la o bază de date, cum ar fi Microsoft Access sau SQL Server, sau ar putea proveni dintr-o altă foaie de lucru.

Apoi, trebuie să adăugați o funcție publică numită „Element”

123 Element funcție publică (index Ca întreg) Ca MyItemSet Item = mItems.Item (index)Funcția de sfârșit

Acest lucru vă permite să faceți referire la obiecte individuale din obiectul de colecție după numărul lor de index. Această funcție oferă o „oglindă” a ceea ce se întâmplă în colecția „mMyItems” din fundal.

De asemenea, va trebui să adăugați o proprietate numită „Număr”, astfel încât codul dvs. să poată stabili câte obiecte „MyItem” sunt în colecția „MyItem”, dacă doriți să iterați prin ea.

123 Proprietatea publică obține numărul () atâta timpCount = mItems.CountProprietate finală

În acest caz, aveți nevoie doar de o proprietate „Obțineți”, deoarece este doar în citire. Folosește colecția mItems deoarece aceasta are deja o proprietate de numărare încorporată.

Acum aveți un obiect (MyItems) cu o ierarhie completă definită de obiectul „MyItem”

Pentru ca totul să funcționeze, acum trebuie să completați o foaie de lucru (Sheet1) cu date, astfel încât rutina Class Initialize să poată colecta acest lucru în obiect

Foaia dvs. de calcul ar trebui să arate astfel:

Folosirea noului dvs. obiect

Acum puteți utiliza obiectul Colecție (MyItems) într-un modul Excel Excel VBA standard. Introduceți următorul cod:

12345678 Sub test_object ()Reduceți clasa mea ca elemente noi, n ca întregMsgBox MyClass.CountPentru n = 1 la MyClass.CountMsgBox MyClass.Item (n) .ItemMsgBox MyClass.Item (n) .DetaliuUrmătorul nSfârșitul Sub

Acest cod creează un obiect numit „MyClass” pe baza obiectului de colecție pe care l-ați creat numit „MyItems”. Aceasta declanșează rutina „Inițializează” care extrage toate datele din foaia de lucru în obiect.

Afișează numărul de articole din colecție și apoi iterează prin colecție afișând textul „Articol” și textul „Detaliu”. Veți observa că atunci când vă referiți la obiectul „Clasa mea” din codul dvs., veți vedea o listă cu cele două proprietăți membre care vă ajută să adăugați proprietatea corectă.

Dacă modificați valoarea unei celule în datele de intrare pe foaia de calcul, aceasta va fi actualizată automat în colecție atunci când rulați din nou codul de mai sus, deoarece atunci când dimensionați obiectul, rutina de inițializare rulează și preia toate noile date

Dacă utilizați cuvântul „Static” în loc de „Dim”, rutina de inițializare nu rulează și valorile vechi sunt păstrate, atâta timp cât codul rulează continuu. Dacă datele din foaia de calcul se modifică, acestea nu vor fi reflectate în obiect

1234567 Sub Test_Static ()Myclas static ca elemente noi, n ca întregPentru n = 1 la Myclass.CountMsgBox Myclass.Item (n) .ItemMsgBox Myclass.Item (n) .DetaliuUrmătorul nSfârșitul Sub

Rezumatul creării unui obiect folosind un modul de clasă

După cum ați văzut, crearea unei ierarhii de module de clasă pentru a fi utilizate ca obiect este o afacere destul de complicată, chiar și pentru o structură la fel de simplă ca exemplul oferit aici. Domeniul de aplicare al greșelilor este enorm!

Cu toate acestea, are avantaje imense în a vă face codul mai elegant și mai ușor de citit. De asemenea, este mai ușor de partajat cu alte aplicații și dezvoltatori Excel transformându-l într-un program de completare.

În acest exemplu despre cum să creați un obiect pentru a păstra date, ar fi o abordare normală să creați o matrice multidimensională pentru a deține datele foii de calcul cu mai multe coloane și ați scrie o linie de cod pentru a actualiza sau citi fiecare element în matricea. Acest lucru ar ajunge probabil să fie destul de dezordonat și s-ar putea face cu ușurință greșeli în abordarea diferitelor elemente.

Cu noul dvs. obiect, vă puteți referi pur și simplu la acesta și la membrii pe care i-ați creat dedesubt pentru a păstra datele.

De asemenea, dacă datele se schimbă în foaia de calcul (sau într-o bază de date conectată, dacă ați utilizat aceasta ca sursă de date în cadrul modulului dvs. de clasă) ori de câte ori utilizați instrucțiunea „Dim”, rutina de inițializare va fi apelată și datele vor fi actualizate instantaneu . Nu este nevoie să scrieți cod pentru a popula din nou matricea.

Utilizarea unui modul de clasă pentru a crea un depozit variabil

Când scrieți cod VBA, utilizați variabile peste tot, toate cu domenii diferite. Unele pot fi definite doar pentru o anumită procedură, altele pentru un anumit modul, iar altele pot fi variabile globale care pot fi utilizate în întreaga aplicație

Puteți crea un modul de clasă care va conține un număr mare de variabile și, deoarece este un obiect, poate fi utilizat oriunde în codul dvs., chiar și într-un formular de utilizator sau într-un control Active X pe care l-ați plasat pe o foaie de lucru.

Avantajul adăugat este că, atunci când vă referiți la obiectul variabil, veți vedea o listă cu toate numele variabilelor deținute în obiect, sortate în ordine crescătoare.

Pentru a crea un depozit, trebuie să inserați un nou modul de clasă. Faceți acest lucru folosind Insert | Class Module din meniul Editor VB

Schimbați numele în „Variabilele mele” utilizând aceeași metodologie ca cea discutată anterior în acest articol.

Introduceți următorul cod:

12345678910111213141516 Private mV ca variantăProprietatea publică Obține variabila1 () ca variantăVariabila1 = mVProprietate finalăProprietatea publică să fie variabilă1 (ByVal vNewValue as Variant)mV = vNewValueProprietate finalăProprietatea publică Obține Variable2 () ca variantăVariabila1 = mVProprietate finalăProprietatea publică Let Variable2 (ByVal vNewValue as Variant)mV = vNewValueProprietate finală

Acest cod setează proprietățile „Let” și „Get” pentru două variabile („Variable1” și „Variable2”). Proprietățile Let și Get sunt necesare pentru fiecare dintre variabilele dvs., astfel încât acestea să fie citite / scrise

Puteți utiliza propriile nume pentru variabile în loc de eșantionul din acest cod și puteți adăuga alte variabile, asigurându-vă că fiecare variabilă nouă are o declarație „Let” și „Get”.

Declarația privată a variabilei „mV” este de a crea o variabilă de lucru care este utilizată numai în cadrul modulului de clasă pentru a transfera valori.

Pentru a utiliza depozitul variabil, introduceți următorul cod într-un modul standard:

123456 VarRepo global ca noi variabile MySub TestVariableRepository ()MsgBox VarRepo.Variable1VarRepo.Variable1 = 10MsgBox VarRepo.Variable1Sfârșitul Sub

Acest cod creează o instanță globală a obiectului „MyVariables” pe care l-ați creat. Trebuie să faceți această declarație o singură dată de oriunde din codul dvs.

Codul afișează mai întâi valoarea „Variable1” pentru a arăta că este goală.

O valoare de 10 este atribuită „Variable1” și noua valoare din obiect este apoi afișată pentru a arăta că această proprietate deține acum această valoare.

Deoarece instanța obiectului „MyVariables” a fost definită global, puteți face referire la oricare dintre variabilele definite în cadrul obiectului de oriunde din codul dvs.

Acest lucru are un avantaj imens, deoarece dacă doriți să utilizați variabilele oriunde în codul dvs., trebuie doar să definiți o singură variabilă globală și, din acea instanță, toate variabilele pot fi accesate și modificate în mod liber în întregul cod.

Transformarea obiectului dvs. într-un program de completare

Până în prezent, codul pentru crearea obiectului se află în aplicația de registru de lucru. Cu toate acestea, dacă doriți să puteți partaja obiectul cu alți dezvoltatori sau în alte aplicații Excel proprii, îl puteți transforma într-un supliment

Pentru a face acest lucru, tot ce trebuie să se întâmple este să salvați fișierul ca un supliment. Selectați Fișier | Salvați ca și va apărea o fereastră de browser

Selectați tipul de fișier ca Add-In (.xlam) din meniul derulant tip fișier și faceți clic pe OK. Fișierul va fi salvat în dosarul Add-In în mod implicit, dar puteți schimba locația.

Apoi, puteți încorpora fișierul suplimentar în aplicațiile Excel, oferindu-vă flexibilitatea de a utiliza noul dvs. obiect

Pentru a include noul dvs. program de completare în Excel, faceți clic pe Fișier pe panglica Excel, apoi faceți clic pe Opțiuni din partea de jos a panoului din stânga

Faceți clic pe „Add-Ins” în panoul din stânga în fereastra pop-up care apare. În partea de jos a ferestrei este un buton marcat cu „Go”

Faceți clic pe acesta și va apărea o fereastră pop-up „Add-In”. Faceți clic pe „Răsfoiți” și apoi localizați fișierul dvs. de completare. Veți putea apoi să vă referiți la obiectul dvs. în cod.

Vei ajuta la dezvoltarea site-ului, partajarea pagina cu prietenii

wave wave wave wave wave