VBA funkcija - poziv, povratna vrijednost i parametri

Ovaj vodič će vas naučiti stvarati i koristiti funkcije sa i bez parametara u VBA

VBA sadrži veliku količinu ugrađenih funkcija koje možete koristiti, ali možete pisati i vlastite. Kada pišete kôd u VBA, možete ga upisati u potpostupak ili postupak funkcije. Postupak funkcije može vratiti vrijednost vašem kodu. Ovo je iznimno korisno ako želite da VBA izvrši zadatak za vraćanje rezultata. VBA funkcije također se mogu pozivati ​​iz Excela, baš kao i Excel-ove ugrađene Excel funkcije.

Stvaranje funkcije bez argumenata

Da biste stvorili funkciju, morate definirati funkciju tako da joj date naziv. Funkcija se tada može definirati kao tip podataka koji označava vrstu podataka koje želite da funkcija vrati.

Možda ćete htjeti stvoriti funkciju koja vraća statičku vrijednost svaki put kada se pozove - pomalo poput konstante.

123 Funkcija GetValue () Kao cijeli brojGetValue = 50Završna funkcija

Ako biste pokrenuli funkciju, funkcija bi uvijek vraćala vrijednost 50.

Također možete stvoriti funkcije koje se odnose na objekte u VBA -i, ali morate koristiti Set Keyword za vraćanje vrijednosti iz funkcije.

123 Funkcija GetRange () kao rasponPostavi GetRange = Raspon ("A1: G4")Završna funkcija

Ako biste koristili gornju funkciju u svom VBA kodu, funkcija bi uvijek vratila raspon ćelija A1 do G4 u bilo kojem listu na kojem radite.

Pozivanje funkcije iz podpostupka

Nakon što kreirate funkciju, možete je pozvati s bilo kojeg drugog mjesta u kodu pomoću podprocedure za pozivanje funkcije.

Vrijednost 50 uvijek bi se vratila.

Također možete pozvati funkciju GetRange iz podprocedure.

U gornjem primjeru, funkcija GetRange poziva se podpostupkom za podebljavanje ćelija u objektu raspona.

Stvaranje funkcija

Pojedinačni argument

Također možete dodijeliti parametar ili parametre svojoj funkciji. Ti se parametri mogu nazvati argumentima.

123 Funkcija PretvoriKilosToPounds (dblKilo kao Double) kao DoublePretvoriKiloToPounds = dblKilo*2.2Završna funkcija

Gornju funkciju tada možemo pozvati iz podpostupka kako bismo utvrdili koliko je funti određena količina kilograma.

Ako je potrebno, funkcija se može pozvati iz više postupaka unutar vašeg VBA koda. Ovo je vrlo korisno jer vas sprječava da morate pisati isti kod uvijek iznova. Također vam omogućuje da podijelite dugačke postupke u male upravljane funkcije.

U gornjem primjeru imamo 2 postupka - svaki od njih koristi funkciju za izračunavanje vrijednosti funte kilograma koji su im preneseni u dblKilo Argument funkcije.

Više argumenata

Možete stvoriti funkciju s više argumenata i proslijediti vrijednosti funkciji pomoću podprocedure.

123 Funkcija CalculateDayDiff (Datum1 kao datum, Datum2 kao datum) kao dvostrukoCalculateDayDiff = Datum2-Datum1Završna funkcija

Zatim možemo pozvati funkciju za izračun količine dana između dva datuma.

Opcijski argumenti

Također možete prenijeti neobavezne argumente u funkciju. Drugim riječima, ponekad će vam argument možda trebati, a ponekad neće - ovisno o tome s kojim kodom koristite funkciju.

123456 Funkcija CalculateDayDiff (Datum1 kao datum, Opcijski datum2 kao datum) kao dvostruko'provjerite drugi datum, a ako ga nema, učinite Date2 jednakim današnjem datumu.Ako je Datum2 = 0 onda je Datum2 = Datum'izračunaj razlikuCalculateDayDiff = Datum2-Datum1Završna funkcija

Zadana vrijednost argumenta

Također možete postaviti zadanu vrijednost Opcijskih argumenata prilikom stvaranja funkcije tako da će, ako korisnik izostavi argument, umjesto toga koristiti vrijednost koju ste stavili kao zadanu.

1234 Funkcija CalculateDayDiff (Datum1 kao datum, Opcijski datum2 kao datum = "06/02/2020") kao dvostruko'izračunaj razlikuCalculateDayDiff = Datum2-Datum1Završna funkcija

ByVal i ByRef

Kada vrijednosti prosljeđujete funkciji, možete koristiti ByVal ili ByRef ključne riječi. Ako izostavite bilo koji od ovih, ByRef koristi se kao zadana.

ByVal znači da prosljeđujete kopiju varijable funkciji, dok ByRef znači da se pozivate na izvornu vrijednost varijable. Kad proslijedite kopiju varijable (ByVal), izvorna vrijednost varijable je NE promijenio, ali kada se pozivate na varijablu, izvornu vrijednost varijable mijenja funkcija.

1234 Funkcija GetValue (ByRef intA kao cijeli broj) kao cijeli brojintA = intA * 4GetValue = intAZavršna funkcija

U gornjoj funkciji ByRef se može izostaviti i funkcija bi radila na isti način.

1234 Funkcija GetValue (intA kao cijeli broj) kao cijeli brojintA = intA * 4GetValue = intAZavršna funkcija

Za pozivanje ove funkcije možemo pokrenuti podproceduru.

123456789 Podispitne vrijednosti ()Dim intVal kao cijeli broj'popunite varijablu vrijednošću 10intVal = 10'pokrenite funkciju GetValue i pokažite vrijednost u neposrednom prozoruDebug.Print GetValue (intVal)'prikaži vrijednost varijable intVal u neposrednom prozoruIspravljanje ispisa intValKraj podm

Imajte na umu da prozori za ispravljanje pogrešaka prikazuju vrijednost 40 oba puta. Kada promenite varijablu IntVal u funkciju - vrijednost 10 se prenosi u funkciju i množi se s 4. Korištenjem ključne riječi ByRef (ili potpuno izostavljanjem), IZMJENITI će se vrijednost varijable IntVal. To se prikazuje kada prvo prikažete rezultat funkcije u neposrednom prozoru (40), a zatim vrijednost varijable IntVal u prozoru za otklanjanje pogrešaka (također 40).

Ako NE želimo promijeniti vrijednost izvorne varijable, moramo koristiti ByVal u funkciji.

1234 Funkcija GetValue (ByVal intA kao cijeli broj) kao cijeli brojintA = intA * 4GetValue = intAZavršna funkcija

Ako sada pozovemo funkciju iz potprocedure, vrijednost varijable IntVal će ostati na 10.

Izlazna funkcija

Ako kreirate funkciju koja testira određeni uvjet, a nakon što se utvrdi da je uvjet istinit, želite vratiti vrijednost iz funkcije, možda ćete morati dodati izraz Izlaz funkcije u svoju funkciju kako biste izašli iz funkcije prije pregledali ste sav kôd u toj funkciji.

12345678910111213 Funkcija FindNumber (strSearch As String) Kao cijeli brojDim i Kao cijeli broj'prođite kroz svako slovo u nizuZa i = 1 To Len (strSearch)'ako je slovo numeričko, vratite vrijednost funkcijiAko je IsNumeric (Mid (strSearch, i, 1)) TadaFindNumber = Mid (strSearch, i, 1)', a zatim izađite iz funkcijeIzlazna funkcijaZavrši akoSljedećiFindNumber = 0Završna funkcija

Gornja funkcija će petljati kroz navedeni niz dok ne pronađe broj, a zatim će vratiti taj broj iz niza. Naći će samo prvi broj u nizu kao i tada Izlaz funkcija.

Gornju funkciju možete pozvati pomoću podprograma kao što je donji.

1234567 PodznakForNumber ()Dim NumIs Integer'proslijedite tekstualni niz funkciji find numberNumIs = FindNumber ("Gornji kat, 8 Oak Lane, Texas")'prikazati rezultat u neposrednom prozoruBrojevi ispisaKraj podm

Korištenje funkcije iz Excel lista

Osim pozivanja funkcije iz vašeg VBA koda pomoću podpostupka, funkciju možete pozvati i iz svog Excel lista. Funkcije koje ste stvorili trebale bi se prema zadanim postavkama pojaviti na vašem popisu funkcija u odjeljku Korisnički definirane liste funkcija.

Klikni na fx za prikaz dijaloškog okvira Umetni funkciju.

Odaberi Korisnik definiran s Popisa kategorija

Odaberite željenu funkciju od dostupnih Korisnički definirane funkcije (UDF -ovi).

Alternativno, kada počnete pisati svoju funkciju u Excelu, funkcija bi se trebala pojaviti na padajućem popisu funkcija.

Ako ne želite da funkcija bude dostupna unutar Excel lista, morate postaviti riječ Privatno ispred riječi Funkcija kada kreirate funkciju u svom VBA kodu.

123 Privatna funkcija CalculateDayDiff (Datum1 kao datum, Datum2 kao datum) kao dvostrukoCalculateDayDiff = Datum2-Datum1Završna funkcija

Sada se neće pojaviti na padajućem popisu koji prikazuje dostupne funkcije programa Excel.

Zanimljivo je da ipak možete koristiti funkciju - jednostavno se neće pojaviti na popisu kada je tražite!

Ako ste drugi argument izjavili kao Izborno, možete izostaviti unutar Excel lista, kao i unutar VBA koda.

Također možete koristiti funkciju koju ste stvorili bez argumenata na Excel listu.

Vi ćete pomoći u razvoju web stranice, dijeljenje stranicu sa svojim prijateljima

wave wave wave wave wave