Postopki »Function« in »Sub« v VBA

Vgrajene funkcije VBA

Preden začnete ustvarjati lastne funkcije VBA, je dobro vedeti, da ima Excel VBA bogato zbirko vnaprej pripravljenih vgrajenih funkcij, ki jih lahko uporabite med pisanjem kode.

Seznam teh funkcij si lahko ogledate v urejevalniku VBA:

  • Odprite Excelov delovni zvezek in zaženite urejevalnik VBA (kliknite za to Alt + F11) in pritisnite F2.
  • Na spustnem seznamu v zgornjem levem kotu zaslona izberite knjižnico VBA.
  • Prikazal se bo seznam vgrajenih razredov in funkcij VBA. Kliknite na ime funkcije, da prikažete njen kratek opis na dnu okna. stiskanje F1 bo odprl spletno stran s pomočjo za to funkcijo.

Poleg tega je celoten seznam vgrajenih funkcij VBA s primeri na voljo v Visual Basic Developer Center.

Postopki po meri »Function« in »Sub« v VBA

V programu Excel Visual Basic je nabor ukazov, ki izvajajo določeno nalogo, postavljen v proceduro. funkcija (Funkcija) oz spodaj (Podrutina). Glavna razlika med postopki funkcija и spodaj je to postopek funkcija vrne rezultat, postopek spodaj – ne.

Torej, če morate izvesti dejanja in dobiti nek rezultat (na primer sešteti več števil), se običajno uporablja postopek funkcija, in če želite preprosto izvesti nekatera dejanja (na primer spremeniti oblikovanje skupine celic), morate izbrati postopek spodaj.

Argumenti

Različne podatke je mogoče posredovati proceduram VBA z uporabo argumentov. Seznam argumentov je naveden pri deklaraciji postopka. Na primer postopek spodaj v VBA doda dano celo število (Integer) vsaki celici v izbranem obsegu. To številko lahko posredujete proceduri z uporabo argumenta, kot je ta:

Sub AddToCells(i kot celo število) ... End Sub

Imejte v mislih, da imate argumente za postopke funkcija и spodaj v VBA ni obvezna. Nekateri postopki ne zahtevajo argumentov.

Izbirni argumenti

Postopki VBA imajo lahko neobvezne argumente. To so argumenti, ki jih lahko uporabnik določi, če želi, in če so izpuščeni, postopek zanje uporabi privzete vrednosti.

Če se vrnemo k prejšnjemu primeru, da bi celoštevilski argument za funkcijo postal neobvezen, bi ga deklarirali takole:

Sub AddToCells (izbirno i kot celo število = 0)

V tem primeru argument celo število i privzeta vrednost bo 0.

V proceduri je lahko več neobveznih argumentov, ki so vsi navedeni na koncu seznama argumentov.

Posredovanje argumentov po vrednosti in po sklicu

Argumente v VBA je mogoče posredovati proceduri na dva načina:

  • ByVal – posredovanje argumenta po vrednosti. To pomeni, da se v proceduro posreduje samo vrednost (to je kopija argumenta), zato bodo vse spremembe argumenta znotraj procedure izgubljene, ko se procedura zapre.
  • avtor Ref – posredovanje argumenta s sklicevanjem. To pomeni, da se dejanski naslov lokacije argumenta v pomnilniku posreduje proceduri. Vse spremembe argumenta znotraj postopka bodo shranjene, ko se postopek zapre.

Uporaba ključnih besed ByVal or avtor Ref v deklaraciji procedure lahko podate, kako se argument posreduje proceduri. To je prikazano v spodnjih primerih:

Sub AddToCells(ByVal i As Integer) ... End Sub
V tem primeru argument celo število i preneseno po vrednosti. Po izstopu iz postopka spodaj vse narejeno z i spremembe bodo izgubljene.
Sub AddToCells(ByRef i As Integer) ... End Sub
V tem primeru argument celo število i preneseno s sklicevanjem. Po izstopu iz postopka spodaj vse narejeno z i spremembe bodo shranjene v spremenljivki, ki je bila posredovana proceduri spodaj.

Ne pozabite, da so argumenti v VBA privzeto posredovani s sklicevanjem. Z drugimi besedami, če ključne besede niso uporabljene ByVal or avtor Ref, potem bo argument posredovan s sklicevanjem.

Preden nadaljujete s postopki funkcija и spodaj podrobneje pa bo koristno še enkrat pogledati značilnosti in razlike med tema dvema vrstama postopkov. Sledijo kratke razprave o postopkih VBA funkcija и spodaj in prikazani so preprosti primeri.

Postopek VBA «Funkcija»

Urejevalnik VBA prepozna postopek funkcijako naleti na skupino ukazov, zaprtih med naslednjima začetnima in končnima stavkoma:

Funkcija ... Končna funkcija

Kot smo že omenili, postopek funkcija v VBA (v nasprotju z spodaj) vrne vrednost. Za vrnjene vrednosti veljajo naslednja pravila:

  • Podatkovni tip vrnjene vrednosti mora biti naveden v glavi postopka funkcija.
  • Spremenljivka, ki vsebuje vrnjeno vrednost, mora biti poimenovana enako kot postopek funkcija. Te spremenljivke ni treba posebej deklarirati, saj vedno obstaja kot sestavni del postopka. funkcija.

To je dobro prikazano v naslednjem primeru.

Primer funkcije VBA: Izvedba matematične operacije na 3 številkah

Sledi primer kode postopka VBA funkcija, ki sprejme tri argumente tipa double (števila s plavajočo vejico dvojne natančnosti). Posledično postopek vrne drugo številko vrste doubleenako vsoti prvih dveh argumentov minus tretji argument:

Funkcija SumMinus(dNum1 Kot dvojno, dNum2 kot dvojno, dNum3 kot dvojno) Kot dvojna vsotaMinus = dNum1 + dNum2 - dNum3 Končna funkcija

Ta zelo preprost postopek VBA funkcija ponazarja, kako se podatki posredujejo proceduri prek argumentov. Vidite lahko, da je podatkovni tip, ki ga vrne postopek, definiran kot double (besede pravijo Kot dvojnik po seznamu argumentov). Ta primer tudi prikazuje, kako je rezultat postopka funkcija shranjen v spremenljivki z enakim imenom kot ime procedure.

Klicanje postopka VBA »Funkcija«

Če zgornji preprost postopek funkcija vstavljen v modul v urejevalniku Visual Basic, ga je mogoče priklicati iz drugih postopkov VBA ali uporabiti na delovnem listu v Excelovem delovnem zvezku.

Pokličite proceduro VBA »Funkcija« iz druge procedure

Postopek funkcija lahko pokličete iz druge procedure VBA tako, da preprosto dodelite to proceduro spremenljivki. Naslednji primer prikazuje klic procedure Summinus, ki je bilo opredeljeno zgoraj.

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

Pokličite proceduro VBA "Funkcija" z delovnega lista

postopek VBA funkcija lahko prikličete z Excelovega delovnega lista na enak način kot katero koli drugo vgrajeno Excelovo funkcijo. Zato postopek, ustvarjen v prejšnjem primeru funkcija - Summinus lahko pokličete tako, da v celico delovnega lista vnesete naslednji izraz:

=SumMinus(10, 5, 2)

Postopek VBA «Sub»

Urejevalnik VBA razume, da je pred njim postopek spodajko naleti na skupino ukazov, zaprtih med naslednjima začetnima in končnima stavkoma:

Sub ... End Sub

Postopek VBA “Sub”: Primer 1. Sredinska poravnava in sprememba velikosti pisave v izbranem obsegu celic

Razmislite o primeru preprostega postopka VBA spodaj, katerega naloga je spremeniti oblikovanje izbranega obsega celic. Celice so centrirane (tako navpično kot vodoravno), velikost pisave pa se spremeni na uporabniško določeno:

Sub Format_Centered_And_Sized(izbirno iFontSize kot celo število = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

Ta postopek spodaj izvaja dejanja, vendar ne vrne rezultata.

Ta primer uporablja tudi izbirni argument Velikost pisave. Če argument Velikost pisave ni prešel v postopek spodaj, potem je njegova privzeta vrednost 10. Če pa argument Velikost pisave prešel v proceduro spodaj, potem bo izbrani obseg celic nastavljen na velikost pisave, ki jo določi uporabnik.

Podpostopek VBA: 2. primer: sredinska poravnava in krepka pisava v izbranem obsegu celic

Naslednji postopek je podoben pravkar obravnavanemu, vendar tokrat namesto spreminjanja velikosti uporabi krepko pisavo za izbrani obseg celic. To je primer postopka spodaj, ki ne sprejema argumentov:

Sub Format_Centered_And_Bold() Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Bold = True End Sub

Klicanje postopka »Sub« v Excelu VBA

Pokličite proceduro VBA »Sub« iz druge procedure

Za klic postopka VBA spodaj iz drugega postopka VBA, morate napisati ključno besedo Pokličite, ime postopka spodaj in nadalje v oklepajih so argumenti postopka. To je prikazano v spodnjem primeru:

Sub main() Call Format_Centered_And_Sized(20) End Sub

Če postopek Format_Centered_And_Sized ima več kot en argument, morajo biti ločeni z vejicami. Všečkaj to:

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

Pokličite proceduro VBA "Sub" z delovnega lista

Postopek spodaj ni mogoče vnesti neposredno v celico Excelovega lista, kot je to mogoče storiti s postopkom funkcijaker postopek spodaj ne vrne vrednosti. Vendar pa postopki spodaj, ki nimajo argumentov in so razglašeni kot javno (kot je prikazano spodaj) bodo na voljo uporabnikom delovnega lista. Torej, če zgoraj obravnavani preprosti postopki spodaj vstavite v modul v urejevalniku Visual Basic, postopek Format_Centered_And_Bold bo na voljo za uporabo v Excelovem delovnem listu in postopek Format_Centered_And_Sized – ne bo na voljo, ker ima argumente.

Tukaj je preprost način za zagon (ali izvedbo) postopka spodaj, dostopen z delovnega lista:

  • Pritisnite Alt + F8 (pritisnite tipko druga in medtem ko jo držite pritisnjeno, pritisnite tipko F8).
  • Na seznamu makrov, ki se prikaže, izberite tistega, ki ga želite zagnati.
  • Pritisnite Run (teči)

Za izvedbo postopka spodaj hitro in preprosto mu lahko dodelite bližnjico na tipkovnici. Za to:

  • Pritisnite Alt + F8.
  • Na seznamu makrov, ki se prikaže, izberite tistega, ki mu želite dodeliti bližnjico na tipkovnici.
  • Pritisnite parametri (Možnosti) in v pogovornem oknu, ki se prikaže, vnesite bližnjico na tipkovnici.
  • Pritisnite OK in zaprite pogovorno okno Makro (makro).

Pozor: Ko makru dodeljujete bližnjico na tipkovnici, se prepričajte, da se ne uporablja kot standardna v Excelu (npr. Ctrl + C). Če izberete že obstoječo bližnjico na tipkovnici, bo ta znova dodeljena makru, posledično pa lahko uporabnik po nesreči zažene makro.

Obseg postopka VBA

Drugi del te vadnice je obravnaval obseg spremenljivk in konstant ter vlogo ključnih besed. javno и Zasebno. Te ključne besede je mogoče uporabiti tudi s postopki VBA:

Public Sub AddToCells(i As Integer) ... End Sub
Če je pred deklaracijo postopka ključna beseda javno, potem bo postopek na voljo vsem modulom v tem projektu VBA.
Private Sub AddToCells(i kot celo število) ... End Sub
Če je pred deklaracijo postopka ključna beseda Zasebno, potem bo ta postopek na voljo samo za trenutni modul. Ni ga mogoče poklicati v katerem koli drugem modulu ali iz Excelovega delovnega zvezka.

Ne pozabite, da če pred razglasitvijo postopka VBA funkcija or spodaj ključna beseda ni vstavljena, je za postopek nastavljena privzeta lastnost javno (to pomeni, da bo na voljo povsod v tem projektu VBA). To je v nasprotju z deklaracijami spremenljivk, ki so privzeto Zasebno.

Zgodnji izhod iz postopkov VBA »Function« in »Sub«

Če morate prekiniti izvajanje postopka VBA funkcija or spodaj, ne da bi čakali na njegov naravni konec, potem za to obstajajo operaterji Izhodna funkcija и Exit Sub. Uporaba teh operatorjev je prikazana spodaj na primeru preprostega postopka. funkcijaA, ki pričakuje, da bo prejel pozitiven argument za izvedbo nadaljnjih operacij. Če je v proceduro posredovana nepozitivna vrednost, ni mogoče izvesti nobenih nadaljnjih operacij, zato mora biti uporabniku prikazano sporočilo o napaki in procedura se mora takoj zapreti:

Funkcija VAT_Amount(sVAT_Rate As Single) Kot posamezen DDV_Amount = 0 If sVAT_Rate <= 0 Then MsgBox "Pričakovana pozitivna vrednost sVAT_Rate but Received" & sVAT_Rate Exit Function End If ... End Function

Upoštevajte, da preden zaključite postopek funkcija - DDV_Znesek, je v kodo vstavljena vgrajena funkcija VBA MsgBox, ki uporabniku prikaže pojavno opozorilo.

Pustite Odgovori