„Funkcie“ a „Pod“ procedúry vo VBA

Vstavané funkcie VBA

Skôr ako začnete vytvárať svoje vlastné funkcie VBA, je dobré vedieť, že Excel VBA má bohatú zbierku vopred vytvorených vstavaných funkcií, ktoré môžete použiť pri písaní kódu.

Zoznam týchto funkcií je možné zobraziť v editore VBA:

  • Otvorte excelový zošit a spustite editor VBA (kliknutím na to Alt + F11) a potom stlačte F2.
  • Vyberte knižnicu z rozbaľovacieho zoznamu v ľavej hornej časti obrazovky VBA.
  • Zobrazí sa zoznam vstavaných tried a funkcií VBA. Kliknutím na názov funkcie sa v spodnej časti okna zobrazí jej stručný popis. lisovanie F1 otvorí stránku online pomocníka pre danú funkciu.

Okrem toho úplný zoznam vstavaných funkcií VBA s príkladmi možno nájsť vo Visual Basic Developer Center.

Vlastné postupy „Function“ a „Sub“ vo VBA

V Excel Visual Basic je sada príkazov, ktoré vykonávajú špecifickú úlohu, umiestnená v procedúre. Funkcie (Funkcia) resp nižšie (Podprogram). Hlavný rozdiel medzi postupmi Funkcie и nižšie je to postup Funkcie vráti výsledok, postup nižšie – nie.

Preto, ak potrebujete vykonať akcie a získať nejaký výsledok (napríklad sčítať niekoľko čísel), zvyčajne sa používa postup Funkciea ak chcete jednoducho vykonať niektoré akcie (napríklad zmeniť formátovanie skupiny buniek), musíte vybrať postup nižšie.

argumenty

Rôzne údaje môžu byť odovzdané procedúram VBA pomocou argumentov. Zoznam argumentov sa špecifikuje pri deklarovaní procedúry. Napríklad postup nižšie vo VBA pridá dané celé číslo (Integer) do každej bunky vo vybranom rozsahu. Toto číslo môžete odovzdať procedúre pomocou argumentu, ako je tento:

Sub AddToCells(i As Integer) ... End Sub

Majte na pamäti, že mať argumenty pre postupy Funkcie и nižšie vo VBA je voliteľný. Niektoré postupy nevyžadujú argumenty.

Voliteľné argumenty

Procedúry VBA môžu mať voliteľné argumenty. Toto sú argumenty, ktoré môže používateľ zadať, ak chce, a ak sú vynechané, postup pre ne použije predvolené hodnoty.

Ak sa vrátime k predchádzajúcemu príkladu, aby bol celočíselný argument pre funkciu voliteľný, bol by deklarovaný takto:

Sub AddToCells (voliteľné i ako celé číslo = 0)

V tomto prípade celočíselný argument i predvolená hodnota bude 0.

V procedúre môže byť niekoľko voliteľných argumentov, pričom všetky sú uvedené na konci zoznamu argumentov.

Odovzdávanie argumentov hodnotou a odkazom

Argumenty vo VBA možno odovzdať procedúre dvoma spôsobmi:

  • byVal – odovzdanie argumentu hodnotou. To znamená, že do procedúry sa odovzdá iba hodnota (tj kópia argumentu), a preto sa pri ukončení procedúry stratia všetky zmeny vykonané v argumente vnútri procedúry.
  • ByRef – odovzdanie argumentu odkazom. To znamená, že skutočná adresa umiestnenia argumentu v pamäti sa odovzdá procedúre. Akékoľvek zmeny vykonané v argumente v procedúre sa uložia, keď procedúra skončí.

Používanie kľúčových slov byVal or ByRef v deklarácii procedúry môžete určiť, ako sa argument odovzdáva procedúre. Je to znázornené na príkladoch nižšie:

Sub AddToCells(ByVal i As Integer) ... End Sub
V tomto prípade celočíselný argument i prešiel hodnotou. Po opustení procedúry nižšie všetko vyrobené s i zmeny sa stratia.
Sub AddToCells(ByRef i As Integer) ... End Sub
V tomto prípade celočíselný argument i prešiel referenciou. Po opustení procedúry nižšie všetko vyrobené s i zmeny sa uložia do premennej, ktorá bola odovzdaná procedúre nižšie.

Pamätajte, že argumenty vo VBA sa štandardne odovzdávajú odkazom. Inými slovami, ak sa nepoužívajú kľúčové slová byVal or ByRef, potom bude argument odovzdaný odkazom.

Pred pokračovaním v postupoch Funkcie и nižšie podrobnejšie bude užitočné pozrieť sa ešte raz na vlastnosti a rozdiely medzi týmito dvoma typmi postupov. Nasledujú krátke diskusie o postupoch VBA Funkcie и nižšie a sú uvedené jednoduché príklady.

Postup VBA «Funkcia»

Editor VBA postup rozpozná Funkciekeď narazí na skupinu príkazov uzavretých medzi nasledujúcimi úvodnými a záverečnými príkazmi:

Funkcia ... Koniec Funkcia

Ako už bolo spomenuté, postup Funkcie vo VBA (na rozdiel od nižšie) vráti hodnotu. Nasledujúce pravidlá platia pre návratové hodnoty:

  • Dátový typ návratovej hodnoty musí byť deklarovaný v hlavičke procedúry Funkcie.
  • Premenná, ktorá obsahuje návratovú hodnotu, musí byť pomenovaná rovnako ako procedúra Funkcie. Túto premennú nie je potrebné deklarovať samostatne, pretože vždy existuje ako integrálna súčasť postupu. Funkcie.

Dobre to ilustruje nasledujúci príklad.

Príklad funkcie VBA: Vykonanie matematickej operácie na 3 číslach

Nasleduje príklad kódu procedúry VBA Funkcie, ktorý má tri argumenty typu dvojitý (čísla s pohyblivou rádovou čiarkou s dvojitou presnosťou). Výsledkom je, že procedúra vráti iné číslo typu dvojitýrovná sa súčtu prvých dvoch argumentov mínus tretí argument:

Funkcia SumMinus(dNum1 ako dvojité, dNum2 ako dvojité, dNum3 ako dvojité) ako dvojité SumMinus = dNum1 + dNum2 - dNum3 Koniec funkcie

Tento veľmi jednoduchý postup VBA Funkcie ilustruje, ako sa údaje prenášajú do procedúry prostredníctvom argumentov. Môžete vidieť, že dátový typ vrátený procedúrou je definovaný ako dvojitý (hovoria slová Ako Double po zozname argumentov). Tento príklad tiež ukazuje, ako výsledok postupu Funkcie uložené v premennej s rovnakým názvom ako je názov procedúry.

Volanie procedúry VBA „Funkcia“

Ak je vyššie uvedený jednoduchý postup Funkcie vložený do modulu v editore Visual Basic, možno ho vyvolať z iných procedúr VBA alebo použiť na pracovnom hárku v excelovom zošite.

Zavolajte procedúru VBA „Function“ z inej procedúry

Postup Funkcie možno volať z inej procedúry VBA jednoduchým priradením tejto procedúry k premennej. Nasledujúci príklad ukazuje volanie procedúry Summinus, ktorý bol definovaný vyššie.

Sub main() Dim total as Double total = SumMinus(5, 4, 3) End Sub

Zavolajte procedúru VBA „Function“ z pracovného hárka

Postup VBA Funkcie možno volať z pracovného hárka programu Excel rovnakým spôsobom ako akúkoľvek inú vstavanú funkciu programu Excel. Preto postup vytvorený v predchádzajúcom príklade Funkcie - Summinus možno volať zadaním nasledujúceho výrazu do bunky hárka:

=SumMinus(10, 5, 2)

Postup VBA «Sub»

Editor VBA chápe, že je pred ním postup nižšiekeď narazí na skupinu príkazov uzavretých medzi nasledujúcimi úvodnými a záverečnými príkazmi:

Sub ... Koniec Sub

Procedúra VBA „Sub“: Príklad 1. Zmena zarovnania na stred a veľkosti písma vo vybranom rozsahu buniek

Uvažujme o príklade jednoduchého postupu VBA nižšie, ktorého úlohou je zmeniť formátovanie vybraného rozsahu buniek. Bunky sú vycentrované (vertikálne aj horizontálne) a veľkosť písma sa zmení na užívateľom špecifikovanú:

Sub Format_Centered_And_Sized(Voliteľné iFontSize As Integer = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

Tento postup nižšie vykoná akcie, ale nevráti výsledok.

Tento príklad používa aj voliteľný argument Veľkosť písma. Ak argument Veľkosť písma neprešiel do konania nižšie, potom je jeho predvolená hodnota 10. Ak však argument Veľkosť písma prešiel do konania nižšie, potom sa vybraný rozsah buniek nastaví na veľkosť písma zadanú používateľom.

Podprocedúra VBA: Príklad 2: Zarovnanie na stred a tučné písmo vo vybranom rozsahu buniek

Nasledujúci postup je podobný tomu, o ktorom sme práve hovorili, no tentoraz namiesto zmeny veľkosti použije na vybratý rozsah buniek štýl tučného písma. Toto je príklad postupu nižšie, ktorý neobsahuje žiadne argumenty:

Sub Format_Centered_And_Bold() Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Bold = True End Sub

Volanie procedúry „Sub“ v Excel VBA

Zavolajte procedúru VBA „Sub“ z inej procedúry

Ak chcete zavolať procedúru VBA nižšie z iného postupu VBA, musíte napísať kľúčové slovo Volanie, názov procedúry nižšie a ďalej v zátvorkách sú argumenty postupu. Toto je znázornené na príklade nižšie:

Sub main() Call Format_Centered_And_Sized(20) End Sub

Ak postup Format_Centered_And_Sized má viac ako jeden argument, musia byť oddelené čiarkami. Páči sa ti to:

Sub main() Call Format_Centered_And_Sized(arg1, arg2, ...) End Sub

Zavolajte procedúru VBA „Sub“ z pracovného hárka

Postup nižšie nemožno zadať priamo do bunky hárka programu Excel, ako je to možné pomocou postupu Funkciepretože postup nižšie nevracia hodnotu. Avšak postupy nižšie, ktoré nemajú argumenty a sú deklarované ako Verejnosť (ako je uvedené nižšie) bude k dispozícii používateľom pracovného hárka. Ak teda jednoduché postupy diskutované vyššie nižšie vložené do modulu v editore jazyka Visual Basic, postup Format_Centered_And_Bold bude k dispozícii na použitie v pracovnom hárku programu Excel a postup Format_Centered_And_Sized – nebude k dispozícii, pretože má argumenty.

Tu je jednoduchý spôsob, ako spustiť (alebo spustiť) procedúru nižšie, prístupný z pracovného hárka:

  • lis Alt + F8 (stlačte kláves ostatné a podržte ho stlačený a stlačte kláves F8).
  • V zobrazenom zozname makier vyberte to, ktoré chcete spustiť.
  • lis beh (beh)

Ak chcete vykonať postup nižšie rýchlo a jednoducho mu môžete priradiť klávesovú skratku. Pre to:

  • lis Alt + F8.
  • V zobrazenom zozname makier vyberte to, ktorému chcete priradiť klávesovú skratku.
  • lis parametre (Možnosti) a v zobrazenom dialógovom okne zadajte klávesovú skratku.
  • lis OK a zatvorte dialógové okno Makro (Makro).

pozor: Pri priraďovaní klávesovej skratky k makru sa uistite, že sa nepoužíva štandardne v Exceli (napr. Ctrl + C). Ak vyberiete už existujúcu klávesovú skratku, bude znova priradená k makru a v dôsledku toho môže používateľ spustiť makro náhodne.

Rozsah postupu VBA

Časť 2 tohto tutoriálu diskutovala o rozsahu premenných a konštánt a úlohe kľúčových slov. Verejnosť и Súkromný. Tieto kľúčové slová možno použiť aj s procedúrami VBA:

Public Sub AddToCells(i As Integer) ... End Sub
Ak deklarácii procedúry predchádza kľúčové slovo Verejnosť, potom bude postup dostupný pre všetky moduly v danom projekte VBA.
Private Sub AddToCells(i As Integer) ... End Sub
Ak deklarácii procedúry predchádza kľúčové slovo Súkromný, potom bude tento postup dostupný len pre aktuálny modul. Nemožno ho volať v inom module alebo z excelového zošita.

Nezabudnite, že ak pred vyhlásením postupu VBA Funkcie or nižšie kľúčové slovo nie je vložené, pre procedúru je nastavená predvolená vlastnosť Verejnosť (to znamená, že bude k dispozícii všade v tomto projekte VBA). To je na rozdiel od deklarácií premenných, ktoré sú štandardne nastavené Súkromný.

Skorý odchod z procedúr VBA „Function“ a „Sub“

Ak potrebujete ukončiť vykonávanie procedúry VBA Funkcie or nižšie, bez čakania na jeho prirodzený koniec, potom na to existujú operátori Funkcia ukončenia и Koniec Sub. Použitie týchto operátorov je znázornené nižšie pomocou jednoduchého postupu ako príkladu. FunkcieA, ktorá očakáva, že dostane kladný argument na vykonanie ďalších operácií. Ak sa do procedúry odovzdá nekladná hodnota, nie je možné vykonať žiadne ďalšie operácie, takže používateľovi by sa malo zobraziť chybové hlásenie a procedúra by sa mala okamžite ukončiť:

Funkcia VAT_Amount(sVAT_Rate As Single) As Single VAT_Amount = 0 Ak sVAT_Rate <= 0 Then MsgBox "Očakávaná kladná hodnota sVAT_Rate, ale prijatá" & sVAT_Rate Exit Function End If... End Function

Upozorňujeme, že pred dokončením postupu Funkcie - DPH_Suma, je do kódu vložená vstavaná funkcia VBA MsgBox, ktorá používateľovi zobrazí vyskakovacie okno s upozornením.

Nechaj odpoveď