Procedurat "Funksioni" dhe "Nën" në VBA

Funksionet e integruara VBA

Përpara se të filloni të krijoni funksionet tuaja VBA, është mirë të dini se Excel VBA ka një koleksion të pasur funksionesh të integruara që mund t'i përdorni gjatë shkrimit të kodit tuaj.

Një listë e këtyre funksioneve mund të shihet në redaktorin VBA:

  • Hapni një libër pune në Excel dhe hapni redaktorin VBA (kliko për ta bërë këtë Alt + F11), dhe më pas shtypni F2.
  • Zgjidhni një bibliotekë nga lista rënëse në krye të majtë të ekranit VBA.
  • Do të shfaqet një listë e klasave dhe funksioneve të integruara VBA. Klikoni mbi emrin e funksionit për të shfaqur përshkrimin e tij të shkurtër në fund të dritares. duke shtypur F1 do të hapë faqen e ndihmës në internet për atë veçori.

Përveç kësaj, një listë e plotë e funksioneve të integruara VBA me shembuj mund të gjendet në Qendrën e Zhvilluesve të Visual Basic.

Procedurat e personalizuara "Funksioni" dhe "Nën" në VBA

Në Excel Visual Basic, një grup komandash që kryejnë një detyrë specifike vendosen në një procedurë. funksion (Funksioni) ose Sub (Nënproutina). Dallimi kryesor midis procedurave funksion и Sub është se procedura funksion kthimi rezultat, procedurë Sub – jo.

Prandaj, nëse keni nevojë të kryeni veprime dhe të merrni ndonjë rezultat (për shembull, të mblidhni disa numra), atëherë zakonisht përdoret procedura funksion, dhe për të kryer thjesht disa veprime (për shembull, të ndryshoni formatimin e një grupi qelizash), duhet të zgjidhni procedurën Sub.

argumentet

Të dhëna të ndryshme mund t'i kalohen procedurave VBA duke përdorur argumente. Lista e argumenteve specifikohet kur deklarohet një procedurë. Për shembull, procedura Sub në VBA shton numrin e plotë të dhënë (Integer) në secilën qelizë në diapazonin e zgjedhur. Ju mund ta kaloni këtë numër në procedurë duke përdorur një argument, si ky:

Nën AddToCells(i Si numër i plotë) ... Fund Sub

Mbani në mend se duke pasur argumente për procedurat funksion и Sub në VBA është opsionale. Disa procedura nuk kërkojnë argumente.

Argumente Fakultative

Procedurat VBA mund të kenë argumente opsionale. Këto janë argumente që përdoruesi mund t'i specifikojë nëse dëshiron, dhe nëse ato hiqen, procedura përdor vlerat e paracaktuara për ta.

Duke u kthyer në shembullin e mëparshëm, për të bërë një argument me numër të plotë në një funksion opsional, ai do të deklarohej si kjo:

Nën AddToCells (Opsionale i Si numër i plotë = 0)

Në këtë rast, argumenti numër i plotë i default do të jetë 0.

Mund të ketë disa argumente opsionale në një procedurë, të cilat të gjitha renditen në fund të listës së argumenteve.

Kalimi i argumenteve sipas vlerës dhe referencës

Argumentet në VBA mund të kalohen në një procedurë në dy mënyra:

  • ByVal – kalimi i një argumenti sipas vlerës. Kjo do të thotë se vetëm vlera (d.m.th., një kopje e argumentit) i kalohet procedurës, dhe për këtë arsye çdo ndryshim i bërë në argument brenda procedurës do të humbasë kur procedura të dalë.
  • ByRef – kalimi i një argumenti me referencë. Kjo do të thotë, adresa aktuale e vendndodhjes së argumentit në memorie i kalohet procedurës. Çdo ndryshim i bërë në një argument brenda procedurës do të ruhet kur procedura të dalë.

Përdorimi i fjalëve kyçe ByVal or ByRef në deklaratën e procedurës, mund të specifikoni se si argumenti kalon në procedurë. Kjo tregohet në shembujt e mëposhtëm:

Nën AddToCells(ByVal i As Integer) ... Fund Sub
Në këtë rast, argumenti numër i plotë i kalohet sipas vlerës. Pas daljes nga procedura Sub të gjitha të bëra me i ndryshimet do të humbasin.
Nën AddToCells(ByRef i As Integer) ... Fund Sub
Në këtë rast, argumenti numër i plotë i kaluar me referencë. Pas daljes nga procedura Sub të gjitha të bëra me i ndryshimet do të ruhen në variablin që i është kaluar procedurës Sub.

Mos harroni se argumentet në VBA kalohen si referencë si parazgjedhje. Me fjalë të tjera, nëse nuk përdoren fjalë kyçe ByVal or ByRef, atëherë argumenti do të kalohet me referencë.

Përpara se të vazhdoni me procedurat funksion и Sub në mënyrë më të detajuar, do të jetë e dobishme t'i hedhim një vështrim tjetër veçorive dhe dallimeve midis këtyre dy llojeve të procedurave. Më poshtë janë diskutime të shkurtra të procedurave VBA funksion и Sub dhe tregohen shembuj të thjeshtë.

Procedura VBA "Funksioni"

Redaktori VBA e njeh procedurën funksionkur ndeshet me një grup komandash të mbyllura midis deklaratave hapëse dhe mbyllëse të mëposhtme:

Funksioni ... Funksioni i Fundit

Siç u përmend më herët, procedura funksion në VBA (në krahasim me Sub) kthen një vlerë. Rregullat e mëposhtme zbatohen për vlerat e kthyera:

  • Lloji i të dhënave të vlerës së kthyer duhet të deklarohet në kokën e procedurës funksion.
  • Variabla që përmban vlerën e kthimit duhet të emërtohet njësoj si procedura funksion. Ky variabël nuk ka nevojë të deklarohet veçmas, pasi ekziston gjithmonë si pjesë përbërëse e procedurës. funksion.

Kjo ilustrohet mirë në shembullin e mëposhtëm.

Shembull i funksionit VBA: Kryerja e një veprimi matematikor në 3 numra

Më poshtë është një shembull i një kodi të procedurës VBA funksion, i cili merr tre argumente të llojit Dyfishtë (numrat me pikë lundruese me saktësi të dyfishtë). Si rezultat, procedura kthen një numër tjetër të llojit Dyfishtëe barabartë me shumën e dy argumenteve të para minus argumentin e tretë:

Funksioni SumMinus(dNum1 si dyfish, dNum2 si dyfish, dNum3 si dyfish) si shuma e dyfishtëMinus = dNum1 + dNum2 - dNum3 Funksioni fundor

Kjo procedurë shumë e thjeshtë VBA funksion ilustron se si të dhënat kalohen në një procedurë përmes argumenteve. Ju mund të shihni se lloji i të dhënave të kthyer nga procedura është përcaktuar si Dyfishtë (thonë fjalët Si Dyfish pas listës së argumenteve). Ky shembull tregon gjithashtu se si rezultati i procedurës funksion ruhet në një variabël me të njëjtin emër si emri i procedurës.

Thirrja e procedurës VBA "Funksion"

Nëse procedura e mësipërme e thjeshtë funksion i futur në një modul në redaktorin e Visual Basic, ai mund të thirret nga procedura të tjera VBA ose të përdoret në një fletë pune në një libër pune Excel.

Thirrni procedurën VBA "Funksion" nga një procedurë tjetër

Procedurë funksion mund të thirret nga një procedurë tjetër VBA thjesht duke ia caktuar atë procedurë një ndryshoreje. Shembulli i mëposhtëm tregon një thirrje për një procedurë Summinus, e cila u përcaktua më sipër.

Nën main() Zbeh totalin si Double total = ShumaMinus(5, 4, 3) Fund Sub

Thirrni procedurën VBA "Funksioni" nga një fletë pune

Procedura VBA funksion mund të thirret nga një fletë pune Excel në të njëjtën mënyrë si çdo funksion tjetër i integruar në Excel. Prandaj, procedura e krijuar në shembullin e mëparshëm funksion - Summinus mund të thirret duke futur shprehjen e mëposhtme në një qelizë të fletës së punës:

=SumMinus(10, 5, 2)

Procedura VBA «Nën»

Redaktori VBA e kupton që ka një procedurë përpara saj Subkur ndeshet me një grup komandash të mbyllura midis deklaratave hapëse dhe mbyllëse të mëposhtme:

Nën ... Fund Nën

Procedura VBA "Nën": Shembull 1. Rreshtimi në qendër dhe madhësia e shkronjave ndryshojnë në një gamë të zgjedhur qelizash

Konsideroni një shembull të një procedure të thjeshtë VBA Sub, detyra e të cilit është të ndryshojë formatimin e gamës së zgjedhur të qelizave. Qelizat janë të përqendruara (si vertikalisht ashtu edhe horizontalisht) dhe madhësia e shkronjave ndryshohet në atë të specifikuar nga përdoruesi:

Nën Format_Centered_And_Sized(iFontSize opsionale si numër i plotë = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize Fund Sub

Kjo procedurë Sub kryen veprime por nuk kthen rezultat.

Ky shembull përdor gjithashtu një argument Opsional Përmasa e germave. Nëse argumenti Përmasa e germave nuk kalohet në procedurë Sub, atëherë vlera e tij e paracaktuar është 10. Megjithatë, nëse argumenti Përmasa e germave kaloi në procedurë Sub, atëherë diapazoni i zgjedhur i qelizave do të vendoset në madhësinë e fontit të specifikuar nga përdoruesi.

Nën-procedura VBA: Shembulli 2: Rreshtimi në qendër dhe fonti i trashë në një gamë të zgjedhur të qelizave

Procedura e mëposhtme është e ngjashme me atë që sapo u diskutua, por këtë herë, në vend të ndryshimit të madhësisë, ajo aplikon një stil fonti të theksuar në gamën e zgjedhur të qelizave. Kjo është një procedurë shembull Sub, e cila nuk merr argumente:

Nën Format_Centered_And_Bold() Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Bold = Fundi i vërtetë Nën

Thirrja e procedurës "Nën" në Excel VBA

Thirrni procedurën VBA "Sub" nga një procedurë tjetër

Për të thirrur një procedurë VBA Sub nga një procedurë tjetër VBA, duhet të shkruani fjalën kyçe Thirrje, emri i procedurës Sub dhe më tej në kllapa janë argumentet e procedurës. Kjo tregohet në shembullin e mëposhtëm:

Nën kryesore() Formati i thirrjes_Me qendër_dhe_madhësi(20) Fundi Nën

Nëse procedura Format_Center_Dhe_Sized ka më shumë se një argument, ato duhet të ndahen me presje. Si kjo:

Nën kryesore() Formati i thirrjes_Me qendër_dhe_madhësi(arg1, arg2, ...) Fundi nën

Thirrni procedurën VBA "Nën" nga fleta e punës

Procedurë Sub nuk mund të futet drejtpërdrejt në një qelizë të fletës Excel, siç mund të bëhet me një procedurë funksionsepse procedura Sub nuk kthen një vlerë. Megjithatë, procedurat Sub, të cilat nuk kanë argumente dhe deklarohen si Publik (siç tregohet më poshtë) do të jetë në dispozicion për përdoruesit e fletës së punës. Kështu, nëse procedurat e thjeshta të diskutuara më sipër Sub futur në një modul në Visual Basic Editor, procedura Format_Cented_and_Bold do të jetë i disponueshëm për përdorim në një fletë pune në Excel, dhe procedura Format_Center_Dhe_Sized – nuk do të jetë i disponueshëm sepse ka argumente.

Këtu është një mënyrë e thjeshtë për të ekzekutuar (ose ekzekutuar) një procedurë Sub, i aksesueshëm nga fleta e punës:

  • shtyp Alt + F8 (shtypni tastin Ndalet dhe duke e mbajtur të shtypur, shtypni tastin F8).
  • Në listën e makrove që shfaqet, zgjidhni atë që dëshironi të ekzekutoni.
  • shtyp run (vrapim)

Për të kryer një procedurë Sub shpejt dhe me lehtësi, mund t'i caktoni një shkurtore të tastierës. Për këtë:

  • shtyp Alt + F8.
  • Në listën e makrove që shfaqet, zgjidhni atë që dëshironi t'i caktoni një shkurtore të tastierës.
  • shtyp Parameters (Opsionet) dhe në kutinë e dialogut që shfaqet, futni shkurtoren e tastierës.
  • shtyp OK dhe mbyllni dialogun Macro (Makro).

Kujdes: Kur caktoni një shkurtore të tastierës në një makro, sigurohuni që ajo të mos përdoret si standard në Excel (për shembull, Ctrl + C). Nëse zgjidhni një shkurtore të tastierës tashmë ekzistuese, ajo do t'i ricaktohet makro dhe si rezultat, përdoruesi mund të nisë rastësisht makro.

Fusha e procedurës VBA

Pjesa 2 e këtij tutoriali diskutoi shtrirjen e variablave dhe konstantave dhe rolin e fjalëve kyçe. Publik и privat. Këto fjalë kyçe mund të përdoren gjithashtu me procedurat VBA:

Nën Publike AddToCells(i Si Integer) ... Fund Sub
Nëse deklarimit të procedurës i paraprin kryefjala Publik, atëherë procedura do të jetë e disponueshme për të gjitha modulet në atë projekt VBA.
Nën Private AddToCells(i Si numër i plotë) ... Fund Sub
Nëse deklarimit të procedurës i paraprin kryefjala privat, atëherë kjo procedurë do të jetë e disponueshme vetëm për modulin aktual. Ai nuk mund të thirret kur është në ndonjë modul tjetër ose nga një libër pune në Excel.

Mos harroni se nëse përpara se të deklaroni një procedurë VBA funksion or Sub fjala kyçe nuk është futur, vetia e paracaktuar është caktuar për procedurën Publik (domethënë, do të jetë i disponueshëm kudo në këtë projekt VBA). Kjo është në kontrast me deklaratat e variablave, të cilat sipas parazgjedhjes janë privat.

Dalja e hershme nga procedurat VBA "Funksioni" dhe "Nën"

Nëse keni nevojë të përfundoni ekzekutimin e një procedure VBA funksion or Sub, pa pritur përfundimin e tij natyror, atëherë për këtë ka operatorë Funksioni i daljes и Dalja Nën. Përdorimi i këtyre operatorëve tregohet më poshtë duke përdorur një procedurë të thjeshtë si shembull. funksionA që pret të marrë një argument pozitiv për të kryer operacione të mëtejshme. Nëse procedurës i kalon një vlerë jo pozitive, atëherë nuk mund të kryhen operacione të mëtejshme, kështu që përdoruesit duhet t'i shfaqet një mesazh gabimi dhe procedura duhet të dalë menjëherë:

Funksioni VAT_Amount(sVAT_Rate As Single) Si Single VAT_Amount = 0 Nëse sVAT_Rate <= 0 Atëherë MsgBox "Pritet një vlerë pozitive e sVAT_Rate por është marrë " & sVAT_Rate Exit Function Fund Nëse ... Funksioni Fundi

Ju lutemi vini re se përpara se të përfundoni procedurën funksion - TVSH_Shuma, një funksion i integruar VBA është futur në kod MsgBox, i cili shfaq një dritare paralajmëruese për përdoruesin.

Lini një Përgjigju