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.