VBA funktsioon - kõne, tagastamisväärtus ja parameetrid

See õpetus õpetab teid looma ja kasutama funktsioone parameetritega ja ilma VBA -s

VBA sisaldab suurel hulgal sisseehitatud funktsioone, mida saate kasutada, kuid saate ka ise kirjutada. Kui kirjutate koodi VBA -sse, saate selle kirjutada alam- või funktsiooniprotseduurina. Funktsiooniprotseduur suudab teie koodile väärtuse tagastada. See on äärmiselt kasulik, kui soovite, et VBA täidaks tulemuse tagastamiseks ülesande. VBA funktsioone saab helistada ka Exceli seest, nagu Exceli sisseehitatud Exceli funktsioonid.

Funktsiooni loomine ilma argumentideta

Funktsiooni loomiseks peate funktsiooni määratlema, andes sellele nime. Funktsiooni saab seejärel määratleda andmetüübina, mis näitab, millist tüüpi andmeid soovite funktsiooni tagastada.

Võib -olla soovite luua funktsiooni, mis tagastab iga kord selle kutsumisel staatilise väärtuse - natuke nagu konstant.

123 Funktsioon GetValue () täisarvunaGetValue = 50Lõppfunktsioon

Kui peaksite funktsiooni käivitama, tagastab funktsioon alati väärtuse 50.

Saate luua ka funktsioone, mis viitavad objektidele VBA -s, kuid funktsiooni väärtuse tagastamiseks peate kasutama märksõna.

123 Funktsioon GetRange () vahemikunaMäära GetRange = Vahemik ("A1: G4")Lõppfunktsioon

Kui kasutate oma VBA -koodis ülaltoodud funktsiooni, tagastab funktsioon alati lahtrite vahemiku A1 kuni G4 olenevalt sellest, millisel lehel te töötate.

Funktsiooni kutsumine alamprotseduurilt

Kui olete funktsiooni loonud, saate sellele helistada mujalt oma koodist, kasutades funktsiooni kutsumiseks alamprotseduuri.

Väärtus 50 tagastatakse alati.

Funktsiooni GetRange saate helistada ka alamprotseduurist.

Ülaltoodud näites kutsutakse alamprotseduur GetFange funktsiooni vahemikuobjekti lahtrite paksuks muutmiseks.

Funktsioonide loomine

Üksik argument

Samuti saate oma funktsioonile määrata parameetri või parameetrid. Neid parameetreid võib nimetada argumentideks.

123 Funktsioon ConvertKilosToPounds (dblKilo kui Double) kui DoubleConvertKiloToPounds = dblKilo*2.2Lõppfunktsioon

Seejärel saame ülaltoodud funktsiooni helistada alamprotseduurilt, et välja selgitada, mitu kilo konkreetne kilo on.

Vajadusel saab funktsiooni kutsuda mitmest VBA -koodi protseduurist. See on väga kasulik, kuna takistab teil korduvalt sama koodi kirjutamast. Samuti võimaldab see jagada pikad protseduurid väikesteks hallatavateks funktsioonideks.

Ülaltoodud näites on meil kaks protseduuri - igaüks neist kasutab funktsiooni, et arvutada neile edastatud kilode naela väärtus dblKilo Funktsiooni argument.

Mitu argumenti

Saate luua funktsiooni mitme argumendiga ja edastada väärtused funktsioonile alamprotseduuri abil.

123 Funktsioon CalculateDayDiff (kuupäev1 kui kuupäev, kuupäev2 kui kuupäev) kui topeltCalculateDayDiff = Kuupäev2-Kuupäev1Lõppfunktsioon

Seejärel saame funktsiooni kutsuda, et arvutada päevade arv kahe kuupäeva vahel.

Valikulised argumendid

Funktsioonile saate edastada ka valikulisi argumente. Teisisõnu, mõnikord võib teil seda argumenti vaja minna ja mõnikord mitte - sõltuvalt sellest, millise koodiga funktsiooni kasutate.

123456 Funktsioon CalculateDayDiff (kuupäev1 kui kuupäev, valikuline kuupäev2 kui kuupäev) kui topelt'kontrollige teist kuupäeva ja kui seda pole, muutke kuupäev2 tänase kuupäevaga võrdseks.Kui Kuupäev2 = 0, siis Kuupäev2 = Kuupäev'arvuta vaheCalculateDayDiff = Kuupäev2-Kuupäev1Lõppfunktsioon

Argumendi vaikeväärtus

Funktsiooni loomisel saate määrata ka valikuliste argumentide vaikeväärtuse, nii et kui kasutaja selle argumendi välja jätab, kasutatakse selle asemel vaikeväärtust.

1234 Funktsioon CalculateDayDiff (kuupäev1 kui kuupäev, valikuline kuupäev2 kui kuupäev = "06.02.2020") kahekordsena'arvuta vaheCalculateDayDiff = Kuupäev2-Kuupäev1Lõppfunktsioon

ByVal ja ByRef

Väärtuste edastamisel funktsioonile saate kasutada ByVal või ByRef märksõnad. Kui jätate mõne neist välja, siis ByRef kasutatakse vaikimisi.

ByVal tähendab, et edastate muutuja koopia funktsioonile, samas kui ByRef tähendab, et viitate muutuja algsele väärtusele. Kui edastate muutuja koopia (ByVal), on muutuja algväärtus MITTE muutunud, kuid muutujale viitamisel muudab funktsioon muutuja algväärtust.

1234 Funktsioon GetValue (ByRef intA As Integer) täisarvunaintA = intA * 4GetValue = intALõppfunktsioon

Ülaltoodud funktsioonis võib ByRef välja jätta ja funktsioon töötaks samamoodi.

1234 Funktsioon GetValue (intA As Integer) täisarvunaintA = intA * 4GetValue = intALõppfunktsioon

Selle funktsiooni kutsumiseks saame käivitada alamprotseduuri.

123456789 Alamkatseväärtused ()Dim intVal täisarvuna'täitke muutuja väärtusega 10intVal = 10'käivitage funktsioon GetValue ja näidake väärtus kohe aknasSilumine. Print GetValue (intVal)'näitab vahetu akna muutuja intVal väärtustSilumine. Prindi intValEnd Sub

Pange tähele, et silumisaknad näitavad mõlemal korral väärtust 40. Kui edastate funktsioonile muutuja IntVal - väärtus 10 edastatakse funktsioonile ja korrutatakse 4. Kui kasutate märksõna ByRef (või jätate selle üldse vahele), MUUTAB muutuja IntVal väärtust. See kuvatakse siis, kui kuvate esmalt funktsiooni tulemuse vahetu aknas (40) ja seejärel silumisaknas muutuja IntVal väärtuse (ka 40).

Kui me ei soovi algse muutuja väärtust muuta, peame funktsioonis kasutama ByVal.

1234 Funktsioon GetValue (ByVal intA As Integer) täisarvunaintA = intA * 4GetValue = intALõppfunktsioon

Nüüd, kui kutsume funktsiooni alamprotseduurist, jääb muutuja IntVal väärtus 10.

Välju funktsioon

Kui loote funktsiooni, mis testib teatud tingimust ja kui tingimus osutub tõeseks, soovite funktsiooni väärtuse tagastada, peate võib -olla lisama funktsiooni väljundi, et funktsioonist väljuda olete selle funktsiooni kogu koodi läbinud.

12345678910111213 Funktsioon FindNumber (strSearch As String) täisarvunaDim i As täisarv'silmus läbi stringi iga täheI = 1 kuni Len (strSearch)'kui täht on numbriline, tagastage väärtus funktsioonileKui IsNumeric (Mid (strSearch, i, 1)) SiisFindNumber = Keskmine (strSearch, i, 1)'siis väljuge funktsioonistVälju funktsioonLõpp KuiEdasiLeidaNumber = 0Lõppfunktsioon

Ülaltoodud funktsioon liigub läbi pakutud stringi, kuni leiab numbri, ja tagastab seejärel selle numbri stringist. See leiab stringi ainult esimese numbri nagu siis Välju funktsiooni.

Ülaltoodud funktsiooni saab kutsuda alamrutiini abil, näiteks allpool.

1234567 AlamkontrollForNumber ()Dim NumIs täisarvuna'edastage tekstistring numbri leidmise funktsioonileNumIs = FindNumber ("Upper Floor, 8 Oak Lane, Texas")'näita tulemust kohe aknasSilumine. Prindi numbridEnd Sub

Funktsiooni kasutamine Exceli lehelt

Lisaks funktsiooni kutsumisele VBA -koodist alamprotseduuri abil saate funktsiooni kutsuda ka oma Exceli lehelt. Teie loodud funktsioonid peaksid vaikimisi ilmuma teie funktsioonide loendis funktsioonide loendi jaotises Kasutaja määratud.

Klõpsake fx dialoogiboksi Funktsiooni lisamine kuvamiseks.

Valige Kasutaja määratud kategooriate loendist

Valige soovitud funktsioon olemasolevate hulgast Kasutaja määratud funktsioonid (UDF -id).

Teise võimalusena, kui hakkate oma funktsiooni Excelisse kirjutama, peaks funktsioon ilmuma funktsioonide ripploendisse.

Kui te ei soovi, et funktsioon oleks Exceli lehel saadaval, peate funktsiooni VBA -koodi loomisel panema privaatse sõna sõna Function ette.

123 Privaatfunktsioon CalculateDayDiff (kuupäev1 kui kuupäev, kuupäev2 kui kuupäev) kahekordsenaCalculateDayDiff = Kuupäev2-Kuupäev1Lõppfunktsioon

Nüüd ei kuvata seda ripploendis, mis näitab saadaolevaid Exceli funktsioone.

Huvitav on aga see, et saate seda funktsiooni siiski kasutada - seda otsides lihtsalt ei kuvata loendis!

Kui olete teise argumendi deklareerinud kui Valikuline, saate selle Exceli lehel ja VBA -koodis välja jätta.

Samuti saate Exceli lehel ilma argumentideta loodud funktsiooni kasutada.

wave wave wave wave wave