Šī apmācība iemācīs jums izveidot un izmantot funkcijas ar un bez parametriem VBA
VBA satur lielu daudzumu iebūvētu funkciju, kuras varat izmantot, taču jūs varat arī rakstīt pats. Rakstot kodu VBA, varat to ierakstīt apakšprocedūrā vai funkciju procedūrā. Funkciju procedūra var atgriezt vērtību jūsu kodam. Tas ir ārkārtīgi noderīgi, ja vēlaties, lai VBA izpildītu uzdevumu, lai atgrieztu rezultātu. VBA funkcijas var izsaukt arī no Excel, tāpat kā Excel iebūvētās Excel funkcijas.
Funkcijas izveide bez argumentiem
Lai izveidotu funkciju, tā ir jādefinē, piešķirot tai nosaukumu. Funkciju var definēt kā datu tipu, kas norāda, kāda veida datus vēlaties atgriezt.
Iespējams, vēlēsities izveidot funkciju, kas katru reizi, kad tā tiek izsaukta, atgriež statisku vērtību - mazliet kā konstante.
123 | Funkcija GetValue () kā vesels skaitlisGetValue = 50Beigu funkcija |
Ja jūs palaistu šo funkciju, funkcija vienmēr atgrieztu vērtību 50.
Varat arī izveidot funkcijas, kas attiecas uz objektiem VBA, bet, lai atgrieztu funkcijas vērtību, jāizmanto iestatītais atslēgvārds.
123 | Funkcija GetRange () kā diapazonsIestatīt GetRange = Diapazons ("A1: G4")Beigu funkcija |
Ja jūs izmantotu iepriekš minēto funkciju savā VBA kodā, funkcija vienmēr atgrieztu šūnu diapazonu no A1 līdz G4 jebkurā lapā, kurā strādājat.
Funkcijas izsaukšana no apakšprocedūras
Kad esat izveidojis funkciju, varat to izsaukt no jebkuras vietas savā kodā, izmantojot apakšprocedūru, lai izsauktu funkciju.
Vērtība 50 vienmēr tiks atgriezta.
Varat arī izsaukt funkciju GetRange no apakšprocedūras.
Iepriekš minētajā piemērā GetRange funkcija tiek izsaukta ar apakšprocedūru, lai treknrakstā norādītu diapazona objekta šūnas.
Funkciju izveide
Viens arguments
Varat arī savai funkcijai piešķirt kādu parametru vai parametrus. Šos parametrus var saukt par argumentiem.
123 | Funkcija ConvertKilosToPounds (dblKilo kā Double) kā DoubleConvertKiloToPounds = dblKilo*2.2Beigu funkcija |
Pēc tam mēs varam izsaukt iepriekš minēto funkciju no apakšprocedūras, lai noskaidrotu, cik mārciņas ir konkrēts kilogramu daudzums.
Ja nepieciešams, funkciju var izsaukt no vairākām procedūrām jūsu VBA kodā. Tas ir ļoti noderīgi, jo tas neļauj jums atkal un atkal rakstīt vienu un to pašu kodu. Tas arī ļauj jums sadalīt garas procedūras mazās pārvaldāmās funkcijās.
Iepriekš minētajā piemērā mums ir 2 procedūras - katra no tām izmanto funkciju, lai aprēķinātu kilogramu vērtību tiem kilogramiem, kas viņiem nodoti dblKilo Funkcijas arguments.
Vairāki argumenti
Jūs varat izveidot funkciju ar vairākiem argumentiem un nodot vērtības funkcijai, izmantojot apakšprocedūru.
123 | Funkcija CalculateDayDiff (datums1 kā datums, datums2 kā datums) kā dubultāCalculateDayDiff = Datums2-Datums1Beigu funkcija |
Pēc tam mēs varam izsaukt funkciju, lai aprēķinātu dienu skaitu starp 2 datumiem.
Neobligāti argumenti
Funkcijai varat arī nodot neobligātus argumentus. Citiem vārdiem sakot, dažreiz jums var būt nepieciešams arguments, un dažreiz jums tas nav vajadzīgs - atkarībā no tā, ar kādu kodu jūs izmantojat funkciju.
123456 | Funkcija CalculateDayDiff (datums1 kā datums, neobligāts datums2 kā datums) kā dubultā'pārbaudiet otro datumu un, ja tā nav, padariet Date2 vienādu ar šodienas datumu.Ja datums2 = 0, tad datums2 = datums'aprēķināt starpībuCalculateDayDiff = Datums2-Datums1Beigu funkcija |
Argumenta noklusējuma vērtība
Funkcijas izveides laikā varat arī iestatīt izvēles argumentu noklusējuma vērtību, lai, ja lietotājs izlaistu argumentu, tā vietā tiktu izmantota vērtība, kuru esat norādījis.
1234 | Funkcija CalculateDayDiff (datums1 kā datums, neobligāts datums2 kā datums = "06/02/2020") kā dubultā'aprēķināt starpībuCalculateDayDiff = Datums2-Datums1Beigu funkcija |
ByVal un ByRef
Pārsūtot funkcijai vērtības, varat izmantot ByVal vai ByRef atslēgvārdus. Ja izlaižat kādu no šiem, ByRef tiek izmantots kā noklusējums.
ByVal nozīmē, ka jūs nododat funkcijai mainīgā kopiju, turpretī ByRef nozīmē, ka jūs atsaucaties uz mainīgā sākotnējo vērtību. Kad nododat mainīgā kopiju (ByVal), mainīgā sākotnējā vērtība ir NĒ mainīts, bet, atsaucoties uz mainīgo, funkcija maina mainīgā sākotnējo vērtību.
1234 | Funkcija GetValue (ByRef intA As Integer) Kā vesels skaitlisintA = intA * 4GetValue = intABeigu funkcija |
Iepriekš minētajā funkcijā ByRef varētu izlaist, un funkcija darbotos tāpat.
1234 | Funkcija GetValue (intA As Integer) Kā vesels skaitlisintA = intA * 4GetValue = intABeigu funkcija |
Lai izsauktu šo funkciju, mēs varam palaist apakšprocedūru.
123456789 | Sub TestValues ()Dim intVal Kā vesels skaitlis'aizpildiet mainīgo ar vērtību 10intVal = 10"palaidiet funkciju GetValue un parādiet vērtību tūlītējā logāAtkļūdot. Drukāt GetValue (intVal)parādīt mainīgā intVal vērtību tūlītējā logāAtkļūdot. Izdrukāt intValBeigu apakš |
Ņemiet vērā, ka atkļūdošanas logi abas reizes parāda vērtību 40. Pārsūtot funkcijai mainīgo IntVal - vērtība 10 tiek nodota funkcijai un reizināta ar 4. Izmantojot ByRef atslēgvārdu (vai to vispār izlaižot), tiks mainīta IntVal mainīgā vērtība. Tas tiek parādīts, ja vispirms parādāt funkcijas rezultātu tiešajā logā (40) un pēc tam atkļūdošanas loga mainīgā IntVal vērtību (arī 40).
Ja mēs nevēlamies mainīt sākotnējā mainīgā vērtību, mums funkcijā jāizmanto ByVal.
1234 | Funkcija GetValue (ByVal intA As Integer) Kā vesels skaitlisintA = intA * 4GetValue = intABeigu funkcija |
Tagad, ja mēs izsauksim funkciju no apakšprocedūras, mainīgā IntVal vērtība paliks 10.
Iziet funkcija
Ja izveidojat funkciju, kas pārbauda noteiktu nosacījumu, un, kad nosacījums ir atzīts par patiesu, vēlaties atgriezt funkcijas vērtību, iespējams, funkcijai jāpievieno paziņojums Exit Function, lai izietu no funkcijas. jūs esat izlaidis visu šīs funkcijas kodu.
12345678910111213 | Funkcija FindNumber (strSearch As String) kā vesels skaitlisDim i As Integer'cilpa cauri katram virknes burtamPar i = 1 līdz Len (strSearch)'ja burts ir cipars, atgrieziet vērtību funkcijaiJa ir IsNumeric (Mid (strSearch, i, 1)) TadFindNumber = Mid (strSearch, i, 1)'pēc tam izejiet no funkcijasIziet funkcijaBeigas JaNākamaisAtrastSkaitlis = 0Beigu funkcija |
Iepriekš minētā funkcija caurskatīs virkni, kas tiek nodrošināta, līdz tiek atrasts skaitlis, un pēc tam atgriež šo skaitli no virknes. Tas atradīs tikai pirmo skaitli virknē, kā toreiz Izeja funkciju.
Iepriekš minēto funkciju var izsaukt, izmantojot apakšprogrammu, piemēram, zemāk norādīto.
1234567 | Sub CheckForNumber ()Dim NumIs kā vesels skaitlis"nodot teksta virkni funkcijai" Atrast skaitli "NumIs = FindNumber ("Augšējais stāvs, 8 ozolu josla, Teksasa")"parādiet rezultātu tūlītējā logāAtkļūdot. Drukāt numurusBeigu apakš |
Funkcijas izmantošana no Excel lapas
Papildus funkcijas izsaukšanai no sava VBA koda, izmantojot apakšprocedūru, varat izsaukt funkciju arī no savas Excel lapas. Izveidotajām funkcijām pēc noklusējuma vajadzētu parādīties jūsu funkciju sarakstā funkciju saraksta lietotāja definētajā sadaļā.
Noklikšķiniet uz fx lai parādītu dialoglodziņu Funkcijas ievietošana.
Izvēlieties Lietotājs definēts no kategoriju saraksta
Izvēlieties vajadzīgo funkciju no pieejamās Lietotāja definētas funkcijas (UDF).
Alternatīvi, kad sākat rakstīt savu funkciju programmā Excel, funkcijai vajadzētu parādīties nolaižamajā funkciju sarakstā.
Ja nevēlaties, lai funkcija būtu pieejama Excel lapā, izveidojot funkciju savā VBA kodā, privātais vārds ir jāievieto vārda Function priekšā.
123 | Privātā funkcija CalculateDayDiff (datums1 kā datums, datums2 kā datums) kā dubultāCalculateDayDiff = Datums2-Datums1Beigu funkcija |
Tagad tas netiks parādīts nolaižamajā sarakstā, kurā parādītas pieejamās Excel funkcijas.
Tomēr interesanti, ka jūs joprojām varat izmantot šo funkciju - tā vienkārši netiks parādīta sarakstā, kad to meklēsit!
Ja esat deklarējis otro argumentu kā Neobligāti, varat to izlaist Excel lapā, kā arī VBA kodā.
Varat arī izmantot Excel lapā izveidoto funkciju bez argumentiem.