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.