VBA funkcija - zvans, atgriešanās vērtība un parametri

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

Jums palīdzēs attīstību vietā, daloties lapu ar draugiem

wave wave wave wave wave