“Function” i “Sub” procedure u VBA

Ugrađene VBA funkcije

Prije nego počnete stvarati vlastite VBA funkcije, dobro je znati da Excel VBA ima bogatu zbirku unaprijed izgrađenih ugrađenih funkcija koje možete koristiti dok pišete svoj kod.

Popis ovih funkcija može se vidjeti u VBA uređivaču:

  • Otvorite Excel radnu knjigu i pokrenite VBA uređivač (kliknite da to učinite Alt + F11), a zatim pritisnite F2.
  • Odaberite biblioteku s padajućeg popisa u gornjem lijevom kutu zaslona VBA.
  • Pojavit će se popis ugrađenih VBA klasa i funkcija. Kliknite na naziv funkcije za prikaz njezinog kratkog opisa na dnu prozora. prešanje F1 otvorit će internetsku stranicu pomoći za tu značajku.

Osim toga, potpuni popis ugrađenih VBA funkcija s primjerima može se pronaći u Visual Basic Developer Center.

Prilagođene procedure “Function” i “Sub” u VBA

U programu Excel Visual Basic skup naredbi koje izvršavaju određeni zadatak smješten je u proceduru. funkcija (Funkcija) ili ispod (Podrutina). Glavna razlika između postupaka funkcija и ispod je li to procedura funkcija vraća rezultat, postupak ispod – ne.

Stoga, ako trebate izvršiti radnje i dobiti neki rezultat (na primjer, zbrojiti nekoliko brojeva), tada se obično koristi postupak funkcija, a kako biste jednostavno izvršili neke radnje (na primjer, promijenili formatiranje grupe ćelija), morate odabrati postupak ispod.

argumenti

Razni podaci mogu se proslijediti VBA procedurama pomoću argumenata. Popis argumenata naveden je prilikom deklaracije procedure. Na primjer, postupak ispod u VBA dodaje dati cijeli broj (Integer) svakoj ćeliji u odabranom rasponu. Ovaj broj možete proslijediti proceduri pomoću argumenta, poput ovog:

Sub AddToCells(i kao cijeli broj) ... End Sub

Imajte na umu da imate argumente za postupke funkcija и ispod u VBA nije obavezno. Neki postupci ne zahtijevaju argumente.

Neobavezni argumenti

VBA procedure mogu imati neobavezne argumente. To su argumenti koje korisnik može navesti ako želi, a ako su izostavljeni, procedura za njih koristi zadane vrijednosti.

Vraćajući se na prethodni primjer, da bi argument cijelog broja za funkciju bio neobavezan, deklarirao bi se ovako:

Sub AddToCells(Optional i As Integer = 0)

U ovom slučaju, argument cijelog broja i zadana vrijednost će biti 0.

Može postojati nekoliko izbornih argumenata u proceduri, a svi su navedeni na kraju popisa argumenata.

Prosljeđivanje argumenata po vrijednosti i po referenci

Argumenti u VBA mogu se proslijediti proceduri na dva načina:

  • ByVal – prosljeđivanje argumenta po vrijednosti. To znači da se samo vrijednost (to jest, kopija argumenta) prosljeđuje proceduri, pa će stoga sve promjene napravljene na argumentu unutar procedure biti izgubljene kada procedura izađe.
  • Autor Ref – prosljeđivanje argumenta referencom. To jest, stvarna adresa lokacije argumenta u memoriji prosljeđuje se proceduri. Sve promjene napravljene na argumentu unutar procedure bit će spremljene kada procedura izađe.

Korištenje ključnih riječi ByVal or Autor Ref u deklaraciji procedure možete odrediti kako se argument prosljeđuje proceduri. To je prikazano u primjerima u nastavku:

Sub AddToCells(ByVal i As Integer) ... End Sub
U ovom slučaju, argument cijelog broja i prošao po vrijednosti. Nakon izlaska iz postupka ispod sve napravljeno sa i promjene će biti izgubljene.
Sub AddToCells(ByRef i As Integer) ... End Sub
U ovom slučaju, argument cijelog broja i prošao referencom. Nakon izlaska iz postupka ispod sve napravljeno sa i promjene će biti pohranjene u varijabli koja je proslijeđena proceduri ispod.

Imajte na umu da se argumenti u VBA prema zadanim postavkama prosljeđuju referencom. Drugim riječima, ako se ne koriste ključne riječi ByVal or Autor Ref, onda će argument biti proslijeđen referencom.

Prije nego što nastavite s postupcima funkcija и ispod detaljnije, bilo bi korisno još jednom pogledati značajke i razlike između ove dvije vrste postupaka. Slijede kratke rasprave o VBA procedurama funkcija и ispod i prikazani su jednostavni primjeri.

VBA procedura «Funkcija»

VBA editor prepoznaje postupak funkcijakada naiđe na grupu naredbi zatvorenih između sljedećih početnih i završnih naredbi:

Funkcija ... Kraj funkcije

Kao što je ranije spomenuto, postupak funkcija u VBA (za razliku od ispod) vraća vrijednost. Za povratne vrijednosti primjenjuju se sljedeća pravila:

  • Tip podataka povratne vrijednosti mora biti deklariran u zaglavlju procedure funkcija.
  • Varijabla koja sadrži povratnu vrijednost mora imati isti naziv kao i procedura funkcija. Ovu varijablu nije potrebno posebno deklarirati jer uvijek postoji kao sastavni dio procedure. funkcija.

Ovo je dobro ilustrirano u sljedećem primjeru.

Primjer VBA funkcije: Izvođenje matematičke operacije na 3 broja

Slijedi primjer koda procedure VBA funkcija, koji uzima tri argumenta tipa dvostruko (brojevi s pomičnim zarezom dvostruke preciznosti). Kao rezultat, procedura vraća drugi broj tipa dvostrukojednak zbroju prva dva argumenta minus treći argument:

Funkcija SumMinus(dNum1 kao Double, dNum2 kao Double, dNum3 kao Double) Kao dvostruki SumMinus = dNum1 + dNum2 - dNum3 Kraj funkcije

Ova vrlo jednostavna VBA procedura funkcija ilustrira kako se podaci prosljeđuju proceduri putem argumenata. Možete vidjeti da je vrsta podataka koju vraća procedura definirana kao dvostruko (riječi kažu Kao Double nakon popisa argumenata). Ovaj primjer također pokazuje kako rezultat postupka funkcija pohranjen u varijablu s istim imenom kao i naziv procedure.

Pozivanje VBA procedure “Funkcija”

Ako gornji jednostavan postupak funkcija umetnut u modul u uređivaču Visual Basic, može se pozvati iz drugih VBA procedura ili koristiti na radnom listu u Excel radnoj knjizi.

Pozovite VBA proceduru “Function” iz druge procedure

Postupak funkcija može se pozvati iz druge VBA procedure jednostavnim dodjeljivanjem te procedure varijabli. Sljedeći primjer prikazuje poziv procedure Summinus, koji je gore definiran.

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

Pozovite VBA proceduru “Function” s radnog lista

VBA postupak funkcija može se pozvati s radnog lista programa Excel na isti način kao i bilo koja druga ugrađena funkcija programa Excel. Dakle, postupak kreiran u prethodnom primjeru funkcija - Summinus može se pozvati unošenjem sljedećeg izraza u ćeliju radnog lista:

=SumMinus(10, 5, 2)

VBA procedura «Sub»

VBA uređivač razumije da je pred njim procedura ispodkada naiđe na grupu naredbi zatvorenih između sljedećih početnih i završnih naredbi:

Sub ... Kraj Sub

VBA procedura “Sub”: Primjer 1. Središnje poravnanje i promjena veličine fonta u odabranom rasponu ćelija

Razmotrite primjer jednostavne VBA procedure ispod, čija je zadaća promijeniti formatiranje odabranog raspona ćelija. Ćelije su centrirane (okomito i vodoravno), a veličina fonta je promijenjena u veličinu koju je odredio korisnik:

Sub Format_Centered_And_Sized(Optional iFontSize As Integer = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

Ovaj postupak ispod izvodi akcije ali ne vraća rezultat.

Ovaj primjer također koristi opcijski argument Veličina fonta. Ako argument Veličina fonta nije prošao u proceduru ispod, tada je njegova zadana vrijednost 10. Međutim, ako argument Veličina fonta prešao u proceduru ispod, tada će odabrani raspon ćelija biti postavljen na veličinu fonta koju je odredio korisnik.

Podpostupak VBA: Primjer 2: Središnje poravnanje i podebljani font u odabranom rasponu ćelija

Sljedeći postupak je sličan onom o kojem smo upravo govorili, ali ovaj put, umjesto promjene veličine, primjenjuje podebljani stil fonta na odabrani raspon ćelija. Ovo je primjer postupka ispod, koji ne uzima argumente:

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

Pozivanje “Sub” procedure u Excel VBA

Pozovite VBA proceduru “Sub” iz druge procedure

Za pozivanje VBA procedure ispod iz druge VBA procedure, trebate napisati ključnu riječ poziv, naziv postupka ispod a dalje u zagradi su argumenti procedure. To je prikazano u primjeru u nastavku:

Sub main() Call Format_Centered_And_Sized(20) End Sub

Ako postupak Format_Centrirano_i_veličinom ima više od jednog argumenta, oni moraju biti odvojeni zarezima. Kao ovo:

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

Pozovite VBA proceduru “Sub” s radnog lista

Postupak ispod ne može se unijeti izravno u ćeliju Excel lista, kao što se može učiniti s procedurom funkcijajer postupak ispod ne vraća vrijednost. Međutim, postupci ispod, koji nemaju argumente i deklariraju se kao javnost (kao što je prikazano u nastavku) bit će dostupni korisnicima radnog lista. Dakle, ako jednostavni postupci koji su gore razmotreni ispod umetnuti u modul u uređivaču Visual Basic, postupak Format_centrirano_i_podebljano bit će dostupni za korištenje u Excel radnom listu, a postupak Format_Centrirano_i_veličinom – neće biti dostupan jer ima argumente.

Evo jednostavnog načina za pokretanje (ili izvršenje) procedure ispod, dostupno iz radnog lista:

  • tisak Alt + F8 (pritisnite tipku drugo i dok je držite pritisnutu, pritisnite tipku F8).
  • Na popisu makronaredbi koji se pojavi odaberite onu koju želite pokrenuti.
  • tisak trčanje (trčanje)

Za izvođenje postupka ispod brzo i jednostavno, možete mu dodijeliti tipkovni prečac. Za ovo:

  • tisak Alt + F8.
  • Na popisu makronaredbi koji se pojavi odaberite onu kojoj želite dodijeliti tipkovni prečac.
  • tisak Parametri (Opcije) i u dijaloški okvir koji se pojavi unesite tipkovni prečac.
  • tisak OK i zatvorite dijalog Makro (Makro).

Pažnja: Kada dodjeljujete tipkovni prečac makronaredbi, provjerite da se ne koristi kao standard u Excelu (npr. Ctrl + C). Ako odaberete već postojeći tipkovnički prečac, on će biti ponovno dodijeljen makronaredbi, a kao rezultat toga, korisnik može slučajno pokrenuti makronaredbu.

Opseg VBA procedure

Drugi dio ovog vodiča raspravljao je o opsegu varijabli i konstanti i ulozi ključnih riječi. javnost и Privatni. Ove se ključne riječi također mogu koristiti s VBA procedurama:

Public Sub AddToCells(i As Integer) ... End Sub
Ako deklaraciji procedure prethodi ključna riječ javnost, tada će postupak biti dostupan svim modulima u tom VBA projektu.
Private Sub AddToCells(i As Integer) ... End Sub
Ako deklaraciji procedure prethodi ključna riječ Privatni, onda će ovaj postupak biti dostupan samo za trenutni modul. Ne može se pozvati dok je u bilo kojem drugom modulu ili iz Excel radne knjige.

Upamtite da ako prije deklariranja VBA procedure funkcija or ispod ključna riječ nije umetnuta, zadano svojstvo je postavljeno za proceduru javnost (odnosno, bit će dostupan posvuda u ovom VBA projektu). Ovo je u suprotnosti s deklaracijama varijabli, koje prema zadanim postavkama jesu Privatni.

Rani izlaz iz VBA procedura “Function” i “Sub”

Ako trebate prekinuti izvođenje VBA procedure funkcija or ispod, bez čekanja na njegov prirodni završetak, onda za to postoje operatori Izlaz iz funkcije и Izlaz iz pod. Korištenje ovih operatora prikazano je u nastavku na primjeru jednostavnog postupka. funkcijaA koji očekuje da će dobiti pozitivan argument za izvođenje daljnjih operacija. Ako se proceduri proslijedi nepozitivna vrijednost, daljnje operacije se ne mogu izvoditi, pa bi korisniku trebala biti prikazana poruka o pogrešci i procedura bi trebala odmah izaći:

Funkcija VAT_Amount(sVAT_Rate As Single) Kao pojedinačni VAT_Amount = 0 If sVAT_Rate <= 0 Then MsgBox "Expected a Positive value of sVAT_Rate but Received" & sVAT_Rate Exit Function End If ... End Function

Imajte na umu da prije dovršetka postupka funkcija - PDV_iznos, ugrađena VBA funkcija umetnuta je u kod MsgBox, koji korisniku prikazuje skočni prozor upozorenja.

Ostavi odgovor