VBA funkcija - skambutis, grąžinimo vertė ir parametrai

Š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.

Padėsite svetainės plėtrą, dalintis puslapį su draugais

wave wave wave wave wave