VBA -toiminto - puhelu, palautusarvo ja parametrit

Tämä opetusohjelma opettaa sinua luomaan ja käyttämään toimintoja parametreilla ja ilman VBA: ta

VBA sisältää suuren määrän sisäänrakennettuja toimintoja, joita voit käyttää, mutta voit myös kirjoittaa omia. Kun kirjoitat koodia VBA: ssa, voit kirjoittaa sen alimenettelyssä tai toimintamenettelyssä. Toimintamenettely voi palauttaa arvon koodillesi. Tämä on erittäin hyödyllistä, jos haluat VBA: n suorittavan tehtävän palauttaakseen tuloksen. VBA-toimintoja voidaan kutsua myös Excelistä, aivan kuten Excelin sisäänrakennetut Excel-toiminnot.

Toiminnon luominen ilman argumentteja

Funktion luomiseksi sinun on määritettävä toiminto antamalla funktiolle nimi. Toiminto voidaan sitten määritellä tietotyypiksi, joka ilmaisee, millaisia ​​tietoja haluat toiminnon palauttavan.

Haluat ehkä luoda funktion, joka palauttaa staattisen arvon joka kerta, kun sitä kutsutaan - vähän kuin vakio.

123 Funktio GetValue () kokonaislukunaGetValue = 50Lopeta toiminto

Jos käytät toimintoa, funktio palauttaa aina arvon 50.

Voit myös luoda toimintoja, jotka viittaavat VBA: n objekteihin, mutta sinun on käytettävä Set Keyword -toimintoa funktion arvon palauttamiseen.

123 Toiminto GetRange () alueenaAseta GetRange = Range ("A1: G4")Lopeta toiminto

Jos käytät yllä olevaa toimintoa VBA -koodissasi, funktio palauttaa aina solualue A1 - G4 sen mukaan, millä taulukolla työskentelet.

Toiminnon kutsuminen alimenettelystä

Kun olet luonut funktion, voit kutsua sen mistä tahansa muualta koodissasi käyttämällä funktion alimenettelyä.

Arvo 50 palautetaan aina.

Voit myös kutsua GetRange -toiminnon alimenettelystä.

Yllä olevassa esimerkissä GetRange -funktio kutsutaan alimenettelyllä lihavoimaan alueobjektin solut.

Toimintojen luominen

Yksittäinen argumentti

Voit myös määrittää toiminnolle parametrin tai parametreja. Näitä parametreja voidaan kutsua argumentteiksi.

123 Toiminto ConvertKilosToPounds (dblKilo Double) kaksinkertaiseksiConvertKiloToPounds = dblKilo*2.2Lopeta toiminto

Voimme sitten kutsua yllä olevan toiminnon alimenettelystä selvittääksemme, kuinka monta kiloa tietty määrä kiloja on.

Toiminto voidaan kutsua tarvittaessa useista VBA -koodisi toimenpiteistä. Tämä on erittäin hyödyllistä, koska se estää sinua joutumasta kirjoittamaan samaa koodia uudestaan ​​ja uudestaan. Sen avulla voit myös jakaa pitkät toimenpiteet pieniin hallittaviin toimintoihin.

Yllä olevassa esimerkissä meillä on kaksi menettelyä - kukin niistä käyttää funktiota laskeakseen niille lähetettyjen kilojen punta -arvon dblKilo Toiminnon argumentti.

Useita väitteitä

Voit luoda funktion, jossa on useita argumentteja, ja siirtää arvot funktiolle alimenettelyn avulla.

123 Toiminto CalculateDayDiff (päivämäärä1 päivämääränä, päivämäärä2 päivämääränä) kaksinkertaisenaCalculateDayDiff = Päivämäärä2-Päivä1Lopeta toiminto

Voimme sitten kutsua funktion laskemaan kahden päivämäärän väliset päivät.

Valinnaiset argumentit

Voit myös välittää toiminnolle valinnaisia ​​argumentteja. Toisin sanoen, joskus saatat tarvita argumenttia ja joskus et - sen mukaan, millä koodilla käytät toimintoa.

123456 Toiminto CalculateDayDiff (päivämäärä1 päivämääränä, valinnainen päivämäärä2 päivämääränä) kaksinkertaisena'Tarkista toinen päivämäärä ja jos ei ole, tee päivämäärä2 sama kuin päivämäärä.Jos Päivämäärä2 = 0, Päivämäärä2 = Päivämäärä'laske eroCalculateDayDiff = Päivämäärä2-Päivä1Lopeta toiminto

Argumentin oletusarvo

Voit myös määrittää valinnaisten argumenttien oletusarvon funktiota luodessasi, jotta jos käyttäjä jättää argumentin pois, sen sijaan käytetään oletusarvoasi asettamaasi arvoa.

1234 Toiminto CalculateDayDiff (päivämäärä1 päivämääränä, valinnainen päivämäärä2 päivämääränä = "06/02/2020") kaksinkertaisena'laske eroCalculateDayDiff = Päivämäärä2-Päivä1Lopeta toiminto

ByVal ja ByRef

Kun välität arvoja funktiolle, voit käyttää ByVal tai ByRef avainsanoja. Jos jätät jompikumpi näistä pois, ByRef käytetään oletuksena.

ByVal tarkoittaa, että välität kopion muuttujasta funktiolle, kun taas ByRef tarkoittaa, että viittaat muuttujan alkuperäiseen arvoon. Kun välität kopion muuttujasta (ByVal), muuttujan alkuperäinen arvo on EI muutettu, mutta kun viitataan muuttujaan, funktio muuttaa muuttujan alkuperäistä arvoa.

1234 Toiminto GetValue (ByRef intA As Integer) kokonaislukunaintA = intA * 4GetValue = intALopeta toiminto

Yllä olevassa toiminnossa ByRef voidaan jättää pois ja toiminto toimisi samalla tavalla.

1234 Toiminto GetValue (intA As Integer) kokonaislukunaintA = intA * 4GetValue = intALopeta toiminto

Voit kutsua tätä toimintoa suorittamalla alimenettelyn.

123456789 Alitestiarvot ()Dim intVal kokonaislukuna'täytä muuttuja arvolla 10intVal = 10'suorita GetValue -toiminto ja näytä arvo välittömässä ikkunassaDebug.Print GetValue (intVal)'näyttää intVal -muuttujan arvon välittömässä ikkunassaDebug.Print intValEnd Sub

Huomaa, että virheenkorjausikkunat näyttävät arvon 40 molemmilla kerroilla. Kun välität muuttujan IntVal funktiolle - arvo 10 välitetään funktiolle ja kerrotaan 4. Käyttämällä ByRef -avainsanaa (tai jättämällä se kokonaan pois) muutetaan IntVal -muuttujan arvoa. Tämä näkyy, kun näytetään ensin funktion tulos välittömässä ikkunassa (40) ja sitten IntVal -muuttujan arvo virheenkorjausikkunassa (myös 40).

Jos emme halua muuttaa alkuperäisen muuttujan arvoa, meidän on käytettävä ByVal -funktiota.

1234 Toiminto GetValue (ByVal intA As Integer) kokonaislukunaintA = intA * 4GetValue = intALopeta toiminto

Jos nyt kutsumme funktion alimenettelystä, muuttujan IntVal arvo pysyy 10: ssä.

Lopeta toiminto

Jos luot funktion, joka testaa tiettyä ehtoa ja kun ehto on todennettu, haluat palauttaa arvon funktiosta, sinun on ehkä lisättävä toimintoon Exit Function -lauseke poistuaksesi toiminnosta ennen olet käynyt läpi kaikki toiminnon koodit.

12345678910111213 Funktio FindNumber (strSearch As String) kokonaislukunaDim i Kuten kokonaisluku'selaa merkkijonon jokainen kirjain läpiI = 1 Len (strSearch)'jos kirjain on numeerinen, palauta arvo funktiolleJos IsNumeric (Mid (strSearch, i, 1)) SittenFindNumber = Keski (strSearch, i, 1)'lopeta sitten toimintoLopeta toimintoLoppu JosSeuraavaFindNumber = 0Lopeta toiminto

Yllä oleva toiminto kiertää annetun merkkijonon läpi, kunnes se löytää numeron, ja palauttaa sitten numeron merkkijonosta. Se löytää vain merkkijonon ensimmäisen numeron kuten silloin Lopeta toiminto.

Yllä oleva toiminto voidaan kutsua alirutiinilla, kuten alla.

1234567 Sub CheckForNumber ()Dim NumIs kokonaislukuna'siirtää tekstimerkkijonon hakutoimintoonNumIs = FindNumber ("Upper Floor, 8 Oak Lane, Texas")'näytä tulos välittömässä ikkunassaDebug.Print NumIsEnd Sub

Toiminnon käyttäminen Excel -taulukosta

Sen lisäksi, että voit kutsua funktiota VBA -koodistasi alimenettelyllä, voit kutsua funktion myös Excel -taulukosta. Luomiesi toimintojen pitäisi oletusarvoisesti näkyä toimintoluettelossasi toimintoluettelon Käyttäjän määrittämässä osassa.

Klikkaa fx Lisää toiminto -valintaikkuna.

Valitse Käyttäjän määrittelemä kategorialuettelosta

Valitse haluamasi toiminto käytettävissä olevista Käyttäjän määrittämät toiminnot (UDF: t).

Vaihtoehtoisesti, kun aloitat funktion kirjoittamisen Exceliin, toiminnon pitäisi näkyä avattavassa toimintoluettelossa.

Jos et halua, että toiminto on käytettävissä Excel -taulukossa, sinun on asetettava Yksityinen sana sanan Function eteen, kun luot funktion VBA -koodissasi.

123 Yksityinen toiminto CalculateDayDiff (päivämäärä1 päivämääränä, päivämäärä2 päivämääränä) kaksinkertaisenaCalculateDayDiff = Päivämäärä2-Päivä1Lopeta toiminto

Se ei nyt näy avattavassa luettelossa, joka näyttää käytettävissä olevat Excel -toiminnot.

Mielenkiintoista kuitenkin, että voit silti käyttää toimintoa - se vain ei näy luettelossa etsiessään sitä!

Jos olet ilmoittanut toisen väitteen muodossa Valinnainen, voit jättää sen pois Excel -taulukosta sekä VBA -koodista.

Voit myös käyttää toimintoa, jonka olet luonut ilman argumentteja Excel -taulukossa.

Tulet auttaa kehittämään sivuston jakaminen sivu ystävillesi

wave wave wave wave wave