Ši pamoka išmokys jus kurti ir naudoti funkcijas su parametrais ir be jų VBA
VBA yra daug integruotų funkcijų, kurias galite naudoti, tačiau taip pat galite rašyti savo. Kai rašote kodą VBA, galite jį parašyti pagal papildomą procedūrą arba funkcijų procedūrą. Funkcijos procedūra gali grąžinti jūsų kodo vertę. Tai labai naudinga, jei norite, kad VBA atliktų užduotį, kad grąžintų rezultatą. VBA funkcijas taip pat galima iškviesti iš „Excel“, kaip ir „Excel“ integruotas „Excel“ funkcijas.
Funkcijos kūrimas be argumentų
Norėdami sukurti funkciją, turite ją apibrėžti, suteikdami funkcijai pavadinimą. Šią funkciją galima apibrėžti kaip duomenų tipą, nurodantį, kokio tipo duomenis norite grąžinti.
Galbūt norėsite sukurti funkciją, kuri kaskart iškviečiant grąžina statinę vertę - šiek tiek panaši į konstantą.
123 | Funkcija GetValue () kaip sveikasis skaičius„GetValue“ = 50Pabaigos funkcija |
Jei paleistumėte funkciją, funkcija visada grąžintų 50 reikšmę.
Taip pat galite sukurti funkcijas, kurios nurodo objektus VBA, bet norėdami grąžinti funkcijos vertę, turite naudoti nustatytą raktinį žodį.
123 | Funkcija „GetRange“ () kaip diapazonasNustatyti „GetRange = Range“ („A1: G4“)Pabaigos funkcija |
Jei savo VBA kode naudotumėte aukščiau nurodytą funkciją, funkcija visada grąžintų langelių diapazoną nuo A1 iki G4 bet kuriame lape, kuriame dirbate.
Funkcijos iškvietimas iš papildomos procedūros
Sukūrę funkciją, galite ją iškviesti iš bet kurios kitos savo kodo vietos, naudodami funkcijai iškviesti taikydami papildomą procedūrą.
50 vertė visada būtų grąžinta.
Taip pat galite iškviesti funkciją „GetRange“ iš papildomos procedūros.
Pirmiau pateiktame pavyzdyje „GetRange“ funkcija vadinama pagal sub procedūrą, kad paryškintumėte diapazono objekto langelius.
Funkcijų kūrimas
Vienas argumentas
Taip pat savo funkcijai galite priskirti parametrą ar parametrus. Šie parametrai gali būti vadinami argumentais.
123 | Funkcija „ConvertKilosToPounds“ („dblKilo“ kaip „Double“) kaip „Double“ConvertKiloToPounds = dblKilo*2.2Pabaigos funkcija |
Tada mes galime iškviesti aukščiau nurodytą funkciją iš papildomos procedūros, kad išsiaiškintume, kiek svarų yra konkretus kilogramų kiekis.
Jei reikia, funkciją galima iškviesti iš kelių VBA kodo procedūrų. Tai labai naudinga, nes neleidžia jums vėl ir vėl rašyti to paties kodo. Tai taip pat leidžia suskirstyti ilgas procedūras į mažas valdomas funkcijas.
Anksčiau pateiktame pavyzdyje mes turime 2 procedūras - kiekviena iš jų naudoja funkciją, kad apskaičiuotų jiems perduotų kilogramų svaro vertę dblKilo Funkcijos argumentas.
Keli argumentai
Galite sukurti funkciją su keliais argumentais ir perduoti vertes funkcijai atlikdami papildomą procedūrą.
123 | Funkcija CalculateDayDiff (data1 kaip data, data2 kaip data) kaip dvigubaCalculateDayDiff = Data2-Data1Pabaigos funkcija |
Tada galime iškviesti funkciją, kad apskaičiuotume dienų skaičių tarp 2 datų.
Neprivalomi argumentai
Funkcijai taip pat galite perduoti pasirenkamus argumentus. Kitaip tariant, kartais jums gali prireikti argumento, o kartais ir ne - priklausomai nuo to, su kokiu kodu naudojate funkciją.
123456 | Funkcija CalculateDayDiff (data1 kaip data, pasirenkama data2 kaip data) kaip dviguba“patikrinkite, ar nėra antros datos, o jei jos nėra, padarykite datą2 lygią šiandienos datai.Jei data2 = 0, tada data2 = data'apskaičiuok skirtumąCalculateDayDiff = Data2-Data1Pabaigos funkcija |
Numatytoji argumento vertė
Kurdami funkciją taip pat galite nustatyti numatytąją pasirenkamų argumentų vertę, kad jei vartotojas praleistų argumentą, vietoj to būtų naudojama reikšmė, kurią nustatėte kaip numatytąją.
1234 | Funkcija CalculateDayDiff (data1 kaip data, pasirenkama data2 kaip data = "2020-02-06") kaip dviguba'apskaičiuok skirtumąCalculateDayDiff = Data2-Data1Pabaigos funkcija |
„ByVal“ ir „ByRef“
Kai perduodate reikšmes funkcijai, galite naudoti ByVal arba ByRef raktinius žodžius. Jei praleisite vieną iš šių, ByRef yra naudojamas kaip numatytasis.
ByVal reiškia, kad perduodate kintamojo kopiją funkcijai, tuo tarpu ByRef reiškia, kad turite omenyje pradinę kintamojo vertę. Kai perduodate kintamojo kopiją (ByVal), pradinė kintamojo vertė yra NE pakeistas, bet kai nurodote kintamąjį, funkcija keičia pradinę kintamojo vertę.
1234 | Funkcija „GetValue“ („ByRef intA As Integer“) kaip sveikasis skaičiusintA = intA * 4„GetValue“ = intAPabaigos funkcija |
Aukščiau esančioje funkcijoje „ByRef“ galima praleisti ir funkcija veiktų taip pat.
1234 | Funkcija „GetValue“ („intA As Integer“) kaip sveikasis skaičiusintA = intA * 4„GetValue“ = intAPabaigos funkcija |
Norėdami iškviesti šią funkciją, galime paleisti papildomą procedūrą.
123456789 | Antrinės bandymo vertės ()Dim intVal As Integer“užpildykite kintamąjį 10 reikšmeintVal = 10“paleiskite funkciją„ GetValue “ir parodykite vertę tiesioginiame langeDerinti. Spausdinti „GetValue“ (intVal)“parodykite kintamojo„ intVal “vertę tiesioginiame langeDerinimas. Spausdinti intValPabaiga Sub |
Atminkite, kad derinimo langai abu kartus rodo 40 reikšmę. Kai funkcijai perduosite kintamąjį „IntVal“ - 10 reikšmė perduodama funkcijai ir padauginama iš 4. Naudojant „ByRef“ raktinį žodį (arba jo visai neįtraukiant), bus pakeista „IntVal“ kintamojo vertė. Tai rodoma, kai pirmiausia parodote funkcijos rezultatą tiesioginiame lange (40), o tada derinimo lange (taip pat ir 40) kintamojo IntVal reikšmę.
Jei nenorime keisti pradinio kintamojo vertės, funkcijoje turime naudoti „ByVal“.
1234 | Funkcija „GetValue“ („ByVal intA As Integer“) kaip sveikasis skaičiusintA = intA * 4„GetValue“ = intAPabaigos funkcija |
Dabar, jei iškviesime funkciją iš papildomos procedūros, kintamojo „IntVal“ vertė išliks 10.
Išėjimo funkcija
Jei sukuriate funkciją, kuri tikrina tam tikrą sąlygą, ir kai nustatoma, kad sąlyga yra teisinga, norite grąžinti funkcijos reikšmę, gali reikėti pridėti funkciją „Exit Function“, kad išeitumėte iš funkcijos. jūs peržiūrėjote visą tos funkcijos kodą.
12345678910111213 | Funkcija FindNumber (strSearch As String) kaip sveikasis skaičiusDim i As Integer“peržiūrėkite kiekvieną eilutės raidęI = 1 iki Len (strSearch)'jei raidė yra skaitinė, grąžinkite reikšmę funkcijaiJei IsNumeric (Mid (strSearch, i, 1)) TadaFindNumber = vidurys (strSearch, i, 1)“, tada išeikite iš funkcijosIšėjimo funkcijaPabaiga JeiKitas„FindNumber“ = 0Pabaigos funkcija |
Aukščiau pateikta funkcija eis per pateiktą eilutę, kol suras skaičių, o tada grąžins tą skaičių iš eilutės. Jis suras tik pirmąjį skaičių eilutėje, kaip ir tada Išeiti funkcija.
Aukščiau pateiktą funkciją galima iškviesti naudojant papildomą procedūrą, tokią kaip žemiau.
1234567 | Sub CheckForNumber ()Dim NumIs kaip sveikasis skaičius“perduoti teksto eilutę funkcijai„ Rasti skaičių “NumIs = FindNumber („Viršutinis aukštas, 8 ąžuolynas, Teksasas“)“parodykite rezultatą tiesioginiame langeDerinti. Spausdinti numeriusPabaiga Sub |
Funkcijos naudojimas „Excel“ lape
Galite ne tik iškviesti funkciją iš savo VBA kodo naudodami papildomą procedūrą, bet ir iškviesti funkciją iš „Excel“ lapo. Jūsų sukurtos funkcijos pagal numatytuosius nustatymus turėtų būti rodomos funkcijų sąrašo funkcijų sąrašo vartotojo apibrėžtame funkcijų sąraše.
Spustelėkite fx kad būtų parodytas dialogo langas Įterpti funkciją.
Pasirinkite Naudotojo apibrėžta iš kategorijų sąrašo
Pasirinkite reikiamą funkciją iš galimų Naudotojo nustatytos funkcijos (UDF).
Arba, kai pradedate rašyti savo funkciją „Excel“, funkcija turėtų būti rodoma išskleidžiamajame funkcijų sąraše.
Jei nenorite, kad funkcija būtų pasiekiama „Excel“ lape, kurdami šią funkciją savo VBA kode, privačią žodį turite įdėti prieš žodį Function.
123 | Privati funkcija CalculateDayDiff (data1 kaip data, data2 kaip data) kaip dvigubaCalculateDayDiff = Data2-Data1Pabaigos funkcija |
Dabar jis nebus rodomas išskleidžiamajame sąraše, rodančiame galimas „Excel“ funkcijas.
Įdomu tai, kad vis tiek galite naudoti šią funkciją - jos tiesiog nebus rodoma sąraše, kai jos ieškosite!
Jei antrąjį argumentą paskelbėte kaip Neprivaloma, galite praleisti jį „Excel“ lape ir VBA kode.
Taip pat galite naudoti funkciją, kurią sukūrėte be argumentų „Excel“ lape.