Funkcia VBA - hovor, návratová hodnota a parametre

Tento tutoriál vás naučí vytvárať a používať funkcie s parametrami a bez parametrov vo VBA

VBA obsahuje veľké množstvo vstavaných funkcií, ktoré môžete používať, ale môžete aj písať svoje vlastné. Keď píšete kód vo VBA, môžete ho napísať v čiastkovom alebo funkčnom postupe. Procedúra funkcie dokáže vrátiť hodnotu do vášho kódu. To je veľmi užitočné, ak chcete, aby VBA vykonal úlohu a vrátil výsledok. Funkcie VBA je možné volať aj z vnútra programu Excel, rovnako ako vstavané funkcie programu Excel v programe Excel.

Vytvorenie funkcie bez argumentov

Na vytvorenie funkcie je potrebné definovať funkciu jej názvom. Funkciu potom možno definovať ako dátový typ udávajúci typ údajov, ktoré má funkcia vrátiť.

Možno budete chcieť vytvoriť funkciu, ktorá pri každom volaní vráti statickú hodnotu - trochu ako konštanta.

123 Funkcia GetValue () ako celé čísloGetValue = 50Koncová funkcia

Ak by ste funkciu spustili, funkcia by vždy vrátila hodnotu 50.

Môžete tiež vytvoriť funkcie, ktoré odkazujú na objekty vo VBA, ale na vrátenie hodnoty z funkcie musíte použiť Nastaviť kľúčové slovo.

123 Funkcia GetRange () ako rozsahNastaviť GetRange = rozsah ("A1: G4")Koncová funkcia

Ak by ste vo svojom kóde VBA použili vyššie uvedenú funkciu, táto funkcia by vždy vrátila rozsah buniek A1 až G4 v každom hárku, v ktorom pracujete.

Volanie funkcie z čiastkového postupu

Akonáhle vytvoríte funkciu, môžete ju zavolať odkiaľkoľvek v kóde pomocou čiastkového postupu na vyvolanie funkcie.

Hodnota 50 sa vždy vráti.

Funkciu GetRange môžete zavolať aj z vedľajšej procedúry.

Vo vyššie uvedenom príklade je funkcia GetRange volaná čiastkovou procedúrou na zvýraznenie buniek v objekte rozsahu.

Vytváranie funkcií

Jediný argument

K svojej funkcii môžete tiež priradiť parameter alebo parametre. Tieto parametre možno označiť ako argumenty.

123 Funkcia ConvertKilosToPounds (dblKilo ako Double) ako DoubleConvertKiloToPounds = dblKilo*2.2Koncová funkcia

Potom môžeme zavolať vyššie uvedenú funkciu z čiastkového postupu, aby sme zistili, koľko libier predstavuje konkrétne množstvo kilogramov.

V prípade potreby je možné funkciu zavolať z viacerých procedúr v rámci kódu VBA. To je veľmi užitočné v tom, že vám to bráni v tom, aby ste museli písať ten istý kód znova a znova. Umožňuje vám tiež rozdeliť dlhé procedúry na malé zvládnuteľné funkcie.

V uvedenom príklade máme 2 postupy - každý z nich používa funkciu na výpočet hodnoty libry kilogramov, ktoré mu boli odovzdané v dblKilo Argument funkcie.

Viacnásobné argumenty

Môžete vytvoriť funkciu s viacerými argumentmi a odovzdať jej hodnoty pomocou čiastkovej procedúry.

123 Funkcia CalculateDayDiff (dátum1 ako dátum, dátum2 ako dátum) ako dvojnásobokCalculateDayDiff = Date2-Date1Koncová funkcia

Potom môžeme zavolať funkciu a vypočítať počet dní medzi 2 dátumami.

Voliteľné argumenty

Funkcii môžete tiež odovzdať voliteľné argumenty. Inými slovami, niekedy možno budete potrebovať argument a niekedy nie - podľa toho, s akým kódom funkciu používate.

123456 Funkcia CalculateDayDiff (dátum1 ako dátum, voliteľný dátum2 ako dátum) ako dvojnásobok„skontrolujte druhý dátum, a ak tam nie je, urobte Dátum2 rovný dnešnému dátumu.Ak Dátum2 = 0, potom Dátum2 = Dátum„vypočítaj rozdielCalculateDayDiff = Date2-Date1Koncová funkcia

Predvolená hodnota argumentu

Pri vytváraní funkcie môžete tiež nastaviť predvolenú hodnotu Voliteľné argumenty, takže ak používateľ argument vynechá, použije sa namiesto toho hodnota, ktorú ste zadali ako predvolenú.

1234 Funkcia CalculateDayDiff (dátum1 ako dátum, voliteľný dátum2 ako dátum = "06/02/2020") ako dvojnásobok„vypočítaj rozdielCalculateDayDiff = Date2-Date1Koncová funkcia

ByVal a ByRef

Keď odovzdávate funkciám hodnoty, môžete použiť ByVal alebo ByRef Kľúčové slová. Ak niektorú z nich vynecháte, prípona ByRef sa používa ako predvolený.

ByVal znamená, že odovzdávate kópiu premennej funkcii, zatiaľ čo ByRef znamená, že máte na mysli pôvodnú hodnotu premennej. Keď odovzdáte kópiu premennej (ByVal), pôvodná hodnota premennej je NIE zmenené, ale keď odkazujete na premennú, pôvodná hodnota premennej sa zmení pomocou funkcie.

1234 Funkcia GetValue (ByRef intA ako celé číslo) ako celé číslointA = intA * 4GetValue = intAKoncová funkcia

Vo vyššie uvedenej funkcii by ByRef mohol byť vynechaný a funkcia by fungovala rovnako.

1234 Funkcia GetValue (intA ako celé číslo) ako celé číslointA = intA * 4GetValue = intAKoncová funkcia

Na vyvolanie tejto funkcie môžeme spustiť čiastkový postup.

123456789 Hodnoty čiastkového testu ()Dim intVal ako celé číslo"vyplňte premennú hodnotou 10intVal = 10'spustite funkciu GetValue a zobrazte hodnotu v bezprostrednom okneDebug.Print GetValue (intVal)'zobraziť hodnotu premennej intVal v bezprostrednom okneDebug.Print intValKoniec pod

Všimnite si toho, že okná ladenia zobrazujú hodnotu 40 oba razy. Keď do funkcie odovzdáte premennú IntVal - hodnota 10 sa odovzdá funkcii a vynásobí sa 4. Použitím kľúčového slova ByRef (alebo jeho úplným vynechaním) ZMENÍTE hodnotu premennej IntVal. Toto sa zobrazí, keď najskôr zobrazíte výsledok funkcie v bezprostrednom okne (40) a potom hodnotu premennej IntVal v okne ladenia (tiež 40).

Ak nechceme zmeniť hodnotu pôvodnej premennej, musíme vo funkcii použiť ByVal.

1234 Funkcia GetValue (ByVal intA As Integer) Ako celé číslointA = intA * 4GetValue = intAKoncová funkcia

Ak teraz zavoláme funkciu z čiastkového postupu, hodnota premennej IntVal zostane na 10.

Ukončiť funkciu

Ak vytvoríte funkciu, ktorá testuje určitú podmienku, a keď sa zistí, že je podmienka pravdivá, chcete vrátiť hodnotu z funkcie, možno budete musieť do svojej funkcie pridať príkaz Ukončiť funkciu, aby ste z nej mohli funkciu ukončiť pred prešli ste všetkým kódom v tejto funkcii.

12345678910111213 Funkcia FindNumber (strSearch ako reťazec) ako celé čísloDim i As Integer'prevlečte každé písmeno v reťazciPre i = 1 až Len (strSearch)„Ak je písmeno číselné, vráťte hodnotu funkciiAk je číselné (stredné (strSearch, i, 1)) PotomFindNumber = Mid (strSearch, i, 1)'potom ukončite funkciuUkončiť funkciuKoniec AkĎalšieFindNumber = 0Koncová funkcia

Vyššie uvedená funkcia bude prechádzať poskytnutým reťazcom, kým nenájde číslo, a potom ho vráti z reťazca. Potom nájde iba prvé číslo v reťazci Východ funkcia.

Vyššie uvedenú funkciu je možné vyvolať podoblasťou, ako je tá nižšie.

1234567 Vedľajšia kontrolaForNumber ()Dim NumIs ako Integer'odovzdajte textový reťazec funkcii nájsť čísloNumIs = FindNumber („Horné poschodie, 8 Oak Lane, Texas“)'ukážte výsledok v bezprostrednom okneDebug.Print NumIsKoniec pod

Použitie funkcie z hárka programu Excel

Okrem volania funkcie z kódu VBA pomocou čiastkovej procedúry môžete funkciu zavolať aj z hárka programu Excel. Funkcie, ktoré ste vytvorili, by sa mali predvolene zobrazovať vo vašom zozname funkcií v sekcii funkcií definovanej používateľom.

Klikni na fx zobrazíte dialógové okno Vložiť funkciu.

Vyberte Definované užívateľom zo zoznamu kategórií

Z dostupných funkcií vyberte požadovanú funkciu Užívateľom definované funkcie (UDF).

Prípadne, keď začnete písať svoju funkciu v programe Excel, mala by sa objaviť v rozbaľovacom zozname funkcií.

Ak nechcete, aby bola funkcia k dispozícii v hárku programu Excel, pri vytváraní funkcie v kóde VBA musíte pred slovo Funkcia umiestniť súkromné ​​slovo.

123 Súkromná funkcia CalculateDayDiff (dátum1 ako dátum, dátum2 ako dátum) ako dvojnásobokCalculateDayDiff = Date2-Date1Koncová funkcia

Teraz sa nezobrazí v rozbaľovacom zozname, ktorý zobrazuje dostupné funkcie programu Excel.

Je však zaujímavé, že túto funkciu môžete stále používať - ​​jednoducho sa neobjaví v zozname, keď ju hľadáte!

Ak ste druhý argument deklarovali ako Voliteľné, môžete vynechať v hárku programu Excel aj v kóde VBA.

Môžete tiež použiť funkciu, ktorú ste vytvorili bez argumentov vo svojom hárku programu Excel.

Vám pomôže rozvoju miesta, zdieľať stránku s priateľmi

wave wave wave wave wave