„Funkcijų“ ir „Sub“ procedūros VBA

Integruotos VBA funkcijos

Prieš pradedant kurti savo VBA funkcijas, pravartu žinoti, kad „Excel VBA“ turi daug iš anksto sukurtų integruotų funkcijų, kurias galite naudoti rašydami kodą.

Šių funkcijų sąrašą galima peržiūrėti VBA redaktoriuje:

  • Atidarykite „Excel“ darbaknygę ir paleiskite VBA rengyklę (spustelėkite, kad tai padarytumėte Alt + F11), tada paspauskite F2.
  • Viršutiniame kairiajame ekrano kampe esančiame išskleidžiamajame sąraše pasirinkite biblioteką VBA.
  • Atsiras integruotų VBA klasių ir funkcijų sąrašas. Spustelėkite funkcijos pavadinimą, kad lango apačioje būtų rodomas trumpas jos aprašymas. spaudžiant F1 bus atidarytas šios funkcijos internetinis pagalbos puslapis.

Be to, visą integruotų VBA funkcijų sąrašą su pavyzdžiais galite rasti „Visual Basic“ kūrėjų centre.

Pasirinktinės procedūros „Funkcija“ ir „Sub“ VBA

Programoje „Excel Visual Basic“ komandų, kurios atlieka konkrečią užduotį, rinkinys dedamas į procedūrą. Funkcija (Funkcija) arba Pagal (Paprogramė). Pagrindinis skirtumas tarp procedūrų Funkcija и Pagal ar tokia procedūra Funkcija grąžina rezultatą, procedūrą Pagal – ne.

Todėl, jei reikia atlikti veiksmus ir gauti kokį nors rezultatą (pavyzdžiui, susumuoti kelis skaičius), tada dažniausiai naudojama procedūra Funkcija, o norint tiesiog atlikti kai kuriuos veiksmus (pavyzdžiui, pakeisti langelių grupės formatavimą), reikia pasirinkti procedūrą Pagal.

Argumentai

Įvairūs duomenys gali būti perduodami VBA procedūroms naudojant argumentus. Argumentų sąrašas nurodomas deklaruojant procedūrą. Pavyzdžiui, procedūra Pagal VBA prideda pateiktą sveikąjį skaičių (Integer) prie kiekvieno pasirinkto diapazono langelio. Šį skaičių galite perduoti procedūrai naudodami tokį argumentą:

Sub AddToCells(i As Integer) ... Pabaiga Sub

Nepamirškite, kad turite argumentų už procedūras Funkcija и Pagal VBA yra neprivalomas. Kai kurios procedūros nereikalauja argumentų.

Neprivalomi argumentai

VBA procedūros gali turėti pasirenkamus argumentus. Tai yra argumentai, kuriuos vartotojas gali nurodyti, jei nori, o jei jie yra praleisti, procedūra naudoja jiems numatytas reikšmes.

Grįžtant prie ankstesnio pavyzdžio, norint, kad sveikojo skaičiaus argumentas būtų neprivalomas, jis būtų deklaruojamas taip:

Sub AddToCells (neprivaloma i kaip sveikasis skaičius = 0)

Šiuo atveju sveikojo skaičiaus argumentas i numatytasis bus 0.

Procedūroje gali būti keli pasirenkami argumentai, kurie visi yra išvardyti argumentų sąrašo pabaigoje.

Argumentų perdavimas pagal vertę ir nuorodą

VBA argumentai gali būti perduoti procedūrai dviem būdais:

  • ByVal – argumento perdavimas pagal vertę. Tai reiškia, kad procedūrai perduodama tik reikšmė (ty argumento kopija), todėl visi procedūroje atlikti argumento pakeitimai bus prarasti, kai procedūra bus baigta.
  • ByRef – argumento perdavimas nuoroda. Tai yra, faktinis argumento vietos atmintyje adresas perduodamas procedūrai. Bet kokie procedūroje atlikti argumento pakeitimai bus išsaugoti, kai procedūra baigiama.

Naudojant raktinius žodžius ByVal or ByRef procedūros deklaracijoje galite nurodyti, kaip argumentas perduodamas procedūrai. Tai parodyta toliau pateiktuose pavyzdžiuose:

Sub AddToCells(ByVal i As Integer) ... Pabaiga Sub
Šiuo atveju sveikojo skaičiaus argumentas i praėjo pagal vertę. Išėjus iš procedūros Pagal visi pagaminti su i pakeitimai bus prarasti.
Sub AddToCells(ByRef i As Integer) ... Pabaiga sub
Šiuo atveju sveikojo skaičiaus argumentas i perduotas remiantis nuoroda. Išėjus iš procedūros Pagal visi pagaminti su i pakeitimai bus saugomi kintamajame, kuris buvo perduotas procedūrai Pagal.

Atminkite, kad VBA argumentai pagal numatytuosius nustatymus perduodami pagal nuorodą. Kitaip tariant, jei nenaudojami raktiniai žodžiai ByVal or ByRef, tada argumentas bus perduodamas remiantis nuoroda.

Prieš tęsdami procedūras Funkcija и Pagal Išsamiau bus naudinga dar kartą pažvelgti į šių dviejų tipų procedūrų ypatybes ir skirtumus. Toliau trumpai aptariamos VBA procedūros Funkcija и Pagal ir pateikiami paprasti pavyzdžiai.

VBA procedūra „Funkcija“

VBA redaktorius atpažįsta procedūrą Funkcijakai susiduria su komandų grupe, esančia tarp šių pradžios ir uždarymo teiginių:

Funkcija... Pabaigos funkciją

Kaip minėta anksčiau, procedūra Funkcija VBA (priešingai nei Pagal) grąžina reikšmę. Grąžinamoms reikšmėms taikomos šios taisyklės:

  • Grąžinamos reikšmės duomenų tipas turi būti deklaruotas procedūros antraštėje Funkcija.
  • Kintamasis, kuriame yra grąžinama reikšmė, turi būti pavadintas taip pat kaip ir procedūra Funkcija. Šio kintamojo atskirai deklaruoti nereikia, nes jis visada egzistuoja kaip neatsiejama procedūros dalis. Funkcija.

Tai gerai iliustruoja sekantis pavyzdys.

VBA funkcijos pavyzdys: matematinės operacijos su 3 skaičiais atlikimas

Toliau pateikiamas VBA procedūros kodo pavyzdys Funkcija, kuriam reikalingi trys tipo argumentai dvigubai (dvigubo tikslumo slankiojo kablelio skaičiai). Dėl to procedūra grąžina kitą tipo skaičių dvigubailygi pirmųjų dviejų argumentų sumai, atėmus trečiąjį argumentą:

Funkcija SumMinus(dNum1 kaip dviguba, dNum2 kaip dviguba, dNum3 kaip dviguba) kaip dviguba sumaMinus = dNum1 + dNum2 - dNum3 pabaigos funkcija

Tai labai paprasta VBA procedūra Funkcija iliustruoja, kaip duomenys perduodami procedūrai naudojant argumentus. Matote, kad procedūros grąžintas duomenų tipas yra apibrėžtas kaip dvigubai (sako žodžiai Kaip Dvigubas po argumentų sąrašo). Šis pavyzdys taip pat parodo, kaip procedūros rezultatas Funkcija saugomi kintamajame tokiu pačiu pavadinimu kaip ir procedūros pavadinimas.

VBA procedūros iškvietimas „Funkcija“

Jei aukščiau aprašyta paprasta procedūra Funkcija įterptas į modulį Visual Basic redaktoriuje, jį galima iškviesti iš kitų VBA procedūrų arba naudoti darbalapyje Excel darbaknygėje.

Iš kitos procedūros iškvieskite VBA procedūrą „Funkcija“.

Procedūra Funkcija galima iškviesti iš kitos VBA procedūros, tiesiog priskiriant tą procedūrą kintamajam. Toliau pateiktame pavyzdyje parodytas procedūros iškvietimas Summinus, kuris buvo apibrėžtas aukščiau.

Sub pagrindinis() Dim total as Double total = SumMinus(5, 4, 3) End Sub

Iš darbalapio iškvieskite VBA procedūrą „Funkcija“.

VBA procedūra Funkcija galima iškviesti iš „Excel“ darbalapio taip pat, kaip ir bet kuri kita integruota „Excel“ funkcija. Todėl ankstesniame pavyzdyje sukurta procedūra Funkcija - Summinus galima iškviesti į darbalapio langelį įvedus šią išraišką:

=SumMinus(10, 5, 2)

VBA procedūra „Sub“

VBA redaktorius supranta, kad prieš jį yra procedūra Pagalkai susiduria su komandų grupe, esančia tarp šių pradžios ir uždarymo teiginių:

Sub ... Pabaiga Sub

VBA procedūra „Sub“: 1 pavyzdys. Išlygiavimas centre ir šrifto dydis pasirinktame langelių diapazone

Apsvarstykite paprastos VBA procedūros pavyzdį Pagal, kurio užduotis yra pakeisti pasirinkto langelių diapazono formatavimą. Langeliai centruojami (tiek vertikaliai, tiek horizontaliai), o šrifto dydis pakeičiamas į vartotojo nurodytą dydį:

Sub Format_Centred_And_Sized (Pasirenkamas iFontSize kaip sveikasis skaičius = 10) Selection.Horizontal Alignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize Pabaigos pogrupis

Ši procedūra Pagal atlieka veiksmus, bet rezultato negrąžina.

Šiame pavyzdyje taip pat naudojamas neprivalomas argumentas Šrifto dydis. Jei argumentas Šrifto dydis nebuvo perduotas į procedūrą Pagal, tada jo numatytoji reikšmė yra 10. Tačiau jei argumentas Šrifto dydis perduotas procedūrai Pagal, tada pasirinktam langelių diapazonui bus nustatytas vartotojo nurodytas šrifto dydis.

VBA antrinė procedūra: 2 pavyzdys: lygiavimas centre ir paryškintas šriftas pasirinktame langelių diapazone

Ši procedūra yra panaši į ką tik aptartą, tačiau šį kartą vietoj dydžio keitimo pasirinktam langelių diapazonui taiko paryškintą šrifto stilių. Tai yra procedūros pavyzdys Pagal, kuriai nereikia argumentų:

Sub Format_Centered_And_Bold() Selection.Horizontal Alignment = xlCenter Selection.Vertical Alignment = xlCenter Selection.Font.Bold = True End Sub

„Sub“ procedūros iškvietimas programoje „Excel VBA“.

Iš kitos procedūros iškvieskite VBA procedūrą „Sub“.

Norėdami iškviesti VBA procedūrą Pagal iš kitos VBA procedūros, reikia parašyti raktinį žodį Paskambinkite mums, procedūros pavadinimas Pagal o toliau skliausteliuose pateikiami procedūros argumentai. Tai parodyta toliau pateiktame pavyzdyje:

Sub main() Call Format_Centered_And_Sized(20) End Sub

Jei procedūra Formatas_centruotas_ir_dydis turi daugiau nei vieną argumentą, jie turi būti atskirti kableliais. Kaip šitas:

Sub main() Call Format_Centered_And_Sized(arg1, arg2, ...) End Sub

Iš darbalapio iškvieskite VBA procedūrą „Sub“.

Procedūra Pagal negalima įvesti tiesiai į Excel lapo langelį, kaip tai galima padaryti naudojant procedūrą Funkcijanes procedūra Pagal negrąžina vertės. Tačiau procedūros Pagal, kurie neturi argumentų ir yra deklaruojami kaip Visuomenės (kaip parodyta toliau) bus prieinama darbalapio naudotojams. Taigi, jei pirmiau aptartos paprastos procedūros Pagal įterptas į modulį Visual Basic Editor, procedūra Formatas_centruotas_ir_paryškintas bus galima naudoti Excel darbalapyje ir procedūrą Formatas_centruotas_ir_dydis – nebus prieinamas, nes turi argumentų.

Štai paprastas būdas paleisti (arba vykdyti) procedūrą Pagal, pasiekiama iš darbalapio:

  • spauda Alt + F8 (paspauskite klavišą Kitas ir laikydami nuspaudę paspauskite klavišą F8).
  • Rodomame makrokomandų sąraše pasirinkite tą, kurią norite paleisti.
  • spauda paleisti (bėgti)

Norint atlikti procedūrą Pagal greitai ir paprastai galite priskirti spartųjį klavišą. Už tai:

  • spauda Alt + F8.
  • Rodomame makrokomandų sąraše pasirinkite tą, kuriai norite priskirti spartųjį klavišą.
  • spauda Parametrai (Parinktys) ir pasirodžiusiame dialogo lange įveskite spartųjį klavišą.
  • spauda OK ir uždarykite dialogo langą Makro (Makro).

Dėmesio: Priskirdami makrokomandai spartųjį klavišą, įsitikinkite, kad jis nėra naudojamas kaip standartas programoje Excel (pvz., Ctrl + C). Jei pasirinksite jau esamą spartųjį klavišą, jis bus iš naujo priskirtas makrokomandai, todėl vartotojas gali netyčia paleisti makrokomandą.

VBA procedūros apimtis

2 šios pamokos dalyje buvo aptarta kintamųjų ir konstantų apimtis bei raktinių žodžių vaidmuo. Visuomenės и Privatus. Šie raktiniai žodžiai taip pat gali būti naudojami su VBA procedūromis:

Public Sub AddToCells(i As Integer) ... Pabaiga sub
Jei prieš procedūros deklaraciją yra raktinis žodis Visuomenės, tada procedūra bus prieinama visiems to VBA projekto moduliams.
Privatūs poskyriai AddToCells(i As Integer) ... Pabaiga sub
Jei prieš procedūros deklaraciją yra raktinis žodis Privatus, tada ši procedūra bus galima tik dabartiniam moduliui. Jo negalima iškviesti bet kuriame kitame modulyje arba iš „Excel“ darbaknygės.

Atminkite, kad jei prieš deklaruodami VBA procedūrą Funkcija or Pagal raktinis žodis neįterptas, procedūrai nustatyta numatytoji savybė Visuomenės (tai yra, jis bus prieinamas visur šiame VBA projekte). Tai skiriasi nuo kintamųjų deklaracijų, kurios pagal numatytuosius nustatymus yra Privatus.

Ankstyvas išėjimas iš VBA procedūrų „Funkcija“ ir „Sub“

Jei reikia nutraukti VBA procedūros vykdymą Funkcija or Pagal, nelaukiant natūralios pabaigos, tada tam yra operatoriai Išėjimo funkcija и Išeiti iš sub. Šių operatorių naudojimas parodytas toliau, naudojant paprastą procedūrą kaip pavyzdį. FunkcijaA, kuri tikisi gauti teigiamą argumentą tolimesnėms operacijoms atlikti. Jei procedūrai perduodama ne teigiama reikšmė, tolesnių operacijų atlikti negalima, todėl vartotojui turėtų būti parodytas klaidos pranešimas ir procedūra turi būti nedelsiant baigta:

Funkcija VAT_Amount(sVAT_Rate As Single) As Single VAT_Amount = 0 Jei sVAT_Rate <= 0 Tada MsgBox "Tikėjosi teigiama sVAT_Rate vertė, bet gauta" & sVAT_Rate Išėjimo funkcija Pabaiga, jei... Pabaigos funkciją

Atkreipkite dėmesį, kad prieš baigdami procedūrą Funkcija - PVM_Suma, į kodą įterpiama integruota VBA funkcija MsgBox, kuriame vartotojui rodomas įspėjamasis langas.

Palikti atsakymą