Funkcija VBA - klic, povratna vrednost in parametri

Ta vadnica vas bo naučila ustvarjati in uporabljati funkcije s parametri in brez njih v VBA

VBA vsebuje veliko vgrajenih funkcij, ki jih lahko uporabljate, lahko pa tudi svoje. Ko pišete kodo v VBA, jo lahko zapišete v podproces ali funkcijski postopek. Funkcijski postopek lahko vrne vrednost vaši kodi. To je izredno uporabno, če želite, da VBA izvede nalogo, da vrne rezultat. Funkcije VBA lahko kličete tudi iz Excela, tako kot Excelove vgrajene Excelove funkcije.

Ustvarjanje funkcije brez argumentov

Če želite ustvariti funkcijo, jo morate definirati tako, da ji dodelite ime. Funkcijo lahko nato definiramo kot podatkovni tip, ki označuje vrsto podatkov, ki jih želite vrniti.

Morda boste želeli ustvariti funkcijo, ki ob vsakem klicu vrne statično vrednost - nekoliko podobno konstanti.

123 Funkcija GetValue () kot celo številoGetValue = 50Končana funkcija

Če bi zagnali funkcijo, bi funkcija vedno vrnila vrednost 50.

Ustvarite lahko tudi funkcije, ki se nanašajo na objekte v VBA, vendar morate za vrnitev vrednosti iz funkcije uporabiti nastavljeno ključno besedo.

123 Funkcijo GetRange () kot obsegNastavi GetRange = Razpon ("A1: G4")Končana funkcija

Če bi uporabili zgornjo funkcijo v kodi VBA, bi funkcija vedno vrnila obseg celic A1 do G4 na katerem koli listu, v katerem delate.

Klicanje funkcije iz podprocedure

Ko ustvarite funkcijo, jo lahko pokličete od koder koli drugje v kodi z uporabo podpostopa za klicanje funkcije.

Vrednost 50 bi se vedno vrnila.

Funkcijo GetRange lahko pokličete tudi iz podprocedure.

V zgornjem primeru se funkcija GetRange pokliče s pomožnim postopkom za krepitev celic v objektu range.

Ustvarjanje funkcij

Enotni argument

Parametru ali parametrom lahko dodelite tudi svojo funkcijo. Te parametre lahko imenujemo argumenti.

123 Funkcija PretvoriKilosToPounds (dblKilo kot dvojno) kot dvojnoPretvoriKiloToPounds = dblKilo*2.2Končana funkcija

Zgornjo funkcijo lahko nato pokličemo iz podprocedure, da ugotovimo, koliko kilogramov je določena količina kilogramov.

Po potrebi lahko funkcijo pokličete iz več postopkov v kodi VBA. To je zelo uporabno, saj vam preprečuje, da bi morali vedno znova pisati isto kodo. Omogoča vam tudi razdelitev dolgih postopkov na majhne obvladljive funkcije.

V zgornjem primeru imamo 2 postopka - vsak s funkcijo izračuna vrednost funtov kilogramov, ki so jim bili preneseni v dblKilo Argument funkcije.

Več argumentov

Ustvarite lahko funkcijo z več argumenti in vrednosti posredujete funkciji s podproceduro.

123 Funkcija CalculateDayDiff (Datum1 kot datum, Datum2 kot datum) kot dvojnoCalculateDayDiff = Datum2-Datum1Končana funkcija

Nato lahko pokličemo funkcijo za izračun količine dni med dvema datumoma.

Izbirni argumenti

Izbirnim argumentom lahko posredujete tudi funkcijo. Z drugimi besedami, včasih boste morda potrebovali argument, včasih pa ne - odvisno od tega, s katero kodo uporabljate funkcijo.

123456 Funkcija CalculateDayDiff (Datum1 kot datum, izbirni datum2 kot datum) kot dvojno'preverite drugi datum in če ni tam, naj bo Date2 enak današnjemu datumu.Če je Datum2 = 0, potem Datum2 = Datum'izračunaj razlikoCalculateDayDiff = Datum2-Datum1Končana funkcija

Privzeta vrednost argumenta

Pri ustvarjanju funkcije lahko nastavite tudi privzeto vrednost izbirnih argumentov, tako da bo uporabnik namesto tega uporabil vrednost, ki ste jo nastavili kot privzeto.

1234 Funkcija CalculateDayDiff (Datum1 kot datum, izbirni datum2 kot datum = "06/02/2020") kot dvojno'izračunaj razlikoCalculateDayDiff = Datum2-Datum1Končana funkcija

ByVal in ByRef

Ko posredujete vrednosti funkciji, lahko uporabite ByVal ali ByRef ključne besede. Če izpustite katerega od teh, ByRef se uporablja kot privzeto.

ByVal pomeni, da funkciji posredujete kopijo spremenljivke, medtem ko ByRef pomeni, da se nanašate na prvotno vrednost spremenljivke. Ko posredujete kopijo spremenljivke (ByVal), je prvotna vrednost spremenljivke NE se spremeni, ko pa se sklicujete na spremenljivko, funkcijo spremeni izvirno vrednost spremenljivke.

1234 Funkcija GetValue (ByRef intA kot celo število) kot celo številointA = intA * 4GetValue = intAKončana funkcija

V zgornji funkciji bi lahko ByRef izpustili in funkcija bi delovala na enak način.

1234 Funkcija GetValue (intA kot celo število) kot celo številointA = intA * 4GetValue = intAKončana funkcija

Če želite poklicati to funkcijo, lahko zaženemo podproceduro.

123456789 Podvredne vrednosti ()Zatemni intVal kot celo število'spremenljivko napolnite z vrednostjo 10intVal = 10'zaženite funkcijo GetValue in vrednost pokažite v neposrednem oknuDebug.Print GetValue (intVal)'prikaži vrednost spremenljivke intVal v neposrednem oknuOdpravljanje napak. Natisni intValEnd Sub

Upoštevajte, da okna za odpravljanje napak obakrat prikažejo vrednost 40. Ko spremenljivki IntVal posredujete funkcijo - vrednost 10 se prenese v funkcijo in pomnoži s 4. Z uporabo ključne besede ByRef (ali pa jo v celoti izpustite) bo SPREMEMBENA vrednost spremenljivke IntVal. To se prikaže, ko najprej prikažete rezultat funkcije v neposrednem oknu (40), nato pa vrednost spremenljivke IntVal v oknu za odpravljanje napak (tudi 40).

Če vrednosti izvirne spremenljivke NE želimo spreminjati, moramo v funkciji uporabiti ByVal.

1234 Funkcija GetValue (ByVal intA kot celo število) kot celo številointA = intA * 4GetValue = intAKončana funkcija

Če zdaj pokličemo funkcijo iz podprocedure, bo vrednost spremenljivke IntVal ostala pri 10.

Izhodna funkcija

Če ustvarite funkcijo, ki preizkuša določen pogoj, in ko se ugotovi, da je pogoj resničen, želite vrniti vrednost iz funkcije, boste morda morali v svojo funkcijo dodati izjavo o izhodu iz funkcije, da boste funkcijo zapustili pred ste prebrali vso kodo v tej funkciji.

12345678910111213 Funkcija FindNumber (strSearch As String) Kot celo številoDim i kot celo število'prečrtajte vsako črko v nizuFor i = 1 To Len (strSearch)'če je črka številčna, vrnite vrednost funkcijiČe je IsNumeric (Mid (strSearch, i, 1)) PotemFindNumber = Mid (strSearch, i, 1)'nato zapustite funkcijoIzhodna funkcijaKonec ČeNaslednjiFindNumber = 0Končana funkcija

Zgornja funkcija se bo pomikala po podanem nizu, dokler ne najde številke, in nato vrnila to številko iz niza. Tako bo našla samo prvo številko v nizu Izhod funkcijo.

Zgornjo funkcijo lahko pokliče podprogram, kot je spodnji.

1234567 Sub CheckForNumber ()Zatemni številke kot celo število'posredujte besedilni niz funkciji find numberNumIs = FindNumber ("Zgornje nadstropje, 8 Oak Lane, Teksas")'prikaže rezultat v neposrednem oknuDebug.Natisni številkeEnd Sub

Uporaba funkcije v Excelovem listu

Poleg klicanja funkcije iz kode VBA s pomočjo podprocedure lahko funkcijo pokličete tudi iz Excelovega lista. Ustvarjene funkcije bi se morale privzeto prikazati na vašem seznamu funkcij v razdelku, ki ga določi uporabnik, na seznamu funkcij.

Kliknite na fx za prikaz pogovornega okna Vstavi funkcijo.

Izberite Uporabnik definiran s seznama kategorij

Od razpoložljivih izberite želeno funkcijo Uporabniško določene funkcije (UDF).

Druga možnost je, da ko začnete pisati svojo funkcijo v Excelu, se mora funkcija prikazati na spustnem seznamu funkcij.

Če ne želite, da je funkcija na voljo v Excelovem listu, morate besedo Zasebno postaviti pred besedo Funkcija, ko ustvarite funkcijo v kodi VBA.

123 Zasebna funkcija CalculateDayDiff (Date1 kot Date, Date2 as Date) kot DoubleCalculateDayDiff = Datum2-Datum1Končana funkcija

Zdaj se ne bo pojavil na spustnem seznamu z razpoložljivimi funkcijami programa Excel.

Zanimivo pa je, da lahko še vedno uporabljate funkcijo - le -ta se ne prikaže na seznamu, ko jo iščete!

Če ste drugi argument deklarirali kot Neobvezno, ga lahko izpustite v Excelovem listu kot tudi v kodi VBA.

Uporabite lahko tudi funkcijo, ki ste jo ustvarili brez argumentov na Excelovem listu.

Vam bo pomagal razvoj spletnega mesta, ki si delijo stran s svojimi prijatelji

wave wave wave wave wave