“Function” i “Sub” procedure u VBA

Ugrađene VBA funkcije

Pre nego što počnete da kreirate sopstvene VBA funkcije, dobro je znati da Excel VBA ima bogatu kolekciju unapred ugrađenih funkcija koje možete koristiti dok pišete svoj kod.

Spisak ovih funkcija može se videti u VBA editoru:

  • Otvorite Excel radnu svesku i pokrenite VBA editor (kliknite da biste to uradili Alt + F11), a zatim pritisnite F2.
  • Izaberite biblioteku sa padajuće liste u gornjem levom uglu ekrana VBA.
  • Pojavit će se lista ugrađenih VBA klasa i funkcija. Kliknite na naziv funkcije da biste prikazali njen kratak opis na dnu prozora. pritiskom F1 će otvoriti stranicu pomoći na mreži za tu funkciju.

Osim toga, kompletna lista ugrađenih VBA funkcija sa primjerima može se naći u Visual Basic Developer Center-u.

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

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

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

Argumenti

Različiti podaci se mogu proslijediti VBA procedurama koristeći argumente. Lista argumenata je navedena kada se deklariše procedura. Na primjer, procedura Izmjene u VBA dodaje dati cijeli broj (Integer) svakoj ćeliji u odabranom rasponu. Možete proslediti ovaj broj proceduri koristeći argument, kao što je ovaj:

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

Imajte na umu da imate argumente za procedure funkcija и Izmjene u VBA je opciono. Neke procedure ne zahtijevaju argumente.

Opcioni argumenti

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

Vraćajući se na prethodni primjer, da biste učinili cijeli broj argument za funkciju opcijski, on bi se deklarirao ovako:

Sub AddToCells (opciono i kao cijeli broj = 0)

U ovom slučaju, cjelobrojni argument i default će biti 0.

U proceduri može postojati nekoliko neobaveznih argumenata, a svi su navedeni na kraju liste argumenata.

Prenošenje argumenata po vrijednosti i referenci

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

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

Korištenje ključnih riječi ByVal or ByRef u deklaraciji procedure, možete specificirati kako se argument prosljeđuje proceduri. Ovo je prikazano u primjerima ispod:

Sub AddToCells(ByVal i As Integer) ... Kraj pod
U ovom slučaju, cjelobrojni argument i proslijeđen po vrijednosti. Nakon napuštanja procedure Izmjene sve napravljeno sa i promjene će biti izgubljene.
Sub AddToCells(ByRef i As Integer) ... Kraj pod
U ovom slučaju, cjelobrojni argument i proslijeđen po referenci. Nakon napuštanja procedure Izmjene sve napravljeno sa i promjene će biti pohranjene u varijablu koja je proslijeđena proceduri Izmjene.

Zapamtite da se argumenti u VBA prosljeđuju kao referenca po defaultu. Drugim riječima, ako se ključne riječi ne koriste ByVal or ByRef, tada će argument biti proslijeđen referencom.

Prije nego nastavite s procedurama funkcija и Izmjene detaljnije, biće korisno još jednom pogledati karakteristike i razlike između ove dvije vrste procedura. U nastavku su kratke rasprave o VBA procedurama funkcija и Izmjene a prikazani su jednostavni primjeri.

VBA procedura «Funkcija»

VBA editor prepoznaje proceduru funkcijakada naiđe na grupu naredbi zatvorenih između sljedećih naredbi za otvaranje i zatvaranje:

Funkcija ... Kraj funkcija

Kao što je ranije pomenuto, procedura funkcija u VBA (za razliku od Izmjene) vraća vrijednost. Sljedeća pravila se primjenjuju na povratne vrijednosti:

  • 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. Ova varijabla ne mora biti posebno deklarirana, jer uvijek postoji kao sastavni dio procedure. funkcija.

Ovo je dobro ilustrovano u sljedećem primjeru.

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

U nastavku je primjer koda VBA procedure 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 duplo, dNum2 kao duplo, dNum3 kao duplo) kao dvostruko summinus = dNum1 + dNum2 - dNum3 Krajnja funkcija

Ova vrlo jednostavna VBA procedura funkcija ilustruje kako se podaci prosleđuju proceduri kroz argumente. Možete vidjeti da je tip podataka koji vraća procedura definiran kao dvostruko (reči kažu Kao Double nakon liste argumenata). Ovaj primjer također pokazuje kako je rezultat postupka funkcija pohranjeno u varijablu s istim imenom kao i ime procedure.

Pozivanje VBA procedure "Funkcija"

Ako je gornja jednostavna procedura funkcija umetnut u modul u Visual Basic editoru, može se pozvati iz drugih VBA procedura ili koristiti na radnom listu u Excel radnoj knjizi.

Pozovite VBA proceduru “Funkcija” iz druge procedure

postupak funkcija može se pozvati iz druge VBA procedure jednostavnim dodeljivanjem te procedure promenljivoj. Sljedeći primjer pokazuje poziv proceduri Summinus, koji je gore definisan.

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

Pozovite VBA proceduru “Funkcija” sa radnog lista

VBA procedura funkcija može se pozvati iz Excel radnog lista na isti način kao i bilo koja druga ugrađena Excel funkcija. Stoga je procedura kreirana 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 urednik shvata da je pred njim procedura Izmjenekada naiđe na grupu naredbi zatvorenih između sljedećih naredbi za otvaranje i zatvaranje:

Sub ... Kraj Sub

VBA procedura “Sub”: Primjer 1. Poravnanje po sredini i promjena veličine fonta u odabranom rasponu ćelija

Razmotrite primjer jednostavne VBA procedure Izmjene, čiji je zadatak da promijeni formatiranje odabranog raspona ćelija. Ćelije su centrirane (i okomito i vodoravno) i veličina fonta se mijenja na korisnički specificiranu:

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

Ovaj postupak Izmjene izvodi radnje, ali ne vraća rezultat.

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

VBA podprocedura: Primjer 2: Poravnanje po sredini i podebljani font u odabranom rasponu ćelija

Sljedeća procedura je slična onoj o kojoj smo upravo raspravljali, ali ovaj put, umjesto promjene veličine, primjenjuje podebljani stil fonta na odabrani raspon ćelija. Ovo je primjer postupka Izmjene, koji ne uzima argumente:

Pod 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 Izmjene iz druge VBA procedure, morate napisati ključnu riječ poziv, naziv procedure Izmjene a dalje u zagradama su argumenti procedure. Ovo je prikazano u primjeru ispod:

Sub main() Format poziva_Centered_And_Sized(20) End Sub

Ako je procedura Format_centrirano_i_veličinom ima više od jednog argumenata, moraju biti odvojeni zarezima. Volim ovo:

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

Pozovite VBA proceduru “Sub” sa radnog lista

postupak Izmjene ne može se uneti direktno u ćeliju Excel lista, kao što se može uraditi procedurom funkcijajer procedura Izmjene ne vraća vrijednost. Međutim, procedure Izmjene, koji nemaju argumente i deklarirani su kao Javni (kao što je prikazano u nastavku) biće dostupno korisnicima radnog lista. Dakle, ako su jednostavne procedure opisane gore Izmjene umetnut u modul u Visual Basic Editoru, procedura Format_centrirano_i_podebljano biće dostupan za upotrebu u Excel radnom listu i proceduri Format_centrirano_i_veličinom – neće biti dostupan jer ima argumente.

Evo jednostavnog načina da pokrenete (ili izvršite) proceduru Izmjene, dostupno sa radnog lista:

  • pritisnuti Alt + F8 (pritisnite tipku alt i dok ga držite pritisnutim, pritisnite tipku F8).
  • Na listi makronaredbi koja se pojavi izaberite onaj koji želite da pokrenete.
  • pritisnuti trčanje (trčati)

Za izvođenje procedure Izmjene brzo i jednostavno, možete mu dodeliti prečicu na tastaturi. Za ovo:

  • pritisnuti Alt + F8.
  • Na listi makronaredbi koja se pojavi odaberite onaj kojem želite dodijeliti prečicu na tipkovnici.
  • pritisnuti parametri (Opcije) i u dijaloškom okviru koji se pojavi unesite prečicu na tastaturi.
  • pritisnuti OK i zatvorite dijalog makro (Makro).

pažnja: Prilikom dodjeljivanja prečice na tastaturi makrou, uvjerite se da se ne koristi kao standard u Excelu (na primjer, Ctrl + C). Ako odaberete već postojeću prečicu na tipkovnici, ona će biti ponovo dodijeljena makrou, a kao rezultat toga, korisnik može slučajno pokrenuti makro.

Opseg VBA procedure

Drugi dio ovog tutorijala govori o opsegu varijabli i konstanti i ulozi ključnih riječi. Javni и privatan. Ove ključne riječi se također mogu koristiti sa VBA procedurama:

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

Zapamtite da ako prije deklariranja VBA procedure funkcija or Izmjene ključna riječ nije umetnuta, zadano svojstvo je postavljeno za proceduru Javni (to jest, biće dostupan svuda u ovom VBA projektu). Ovo je u suprotnosti sa deklaracijama varijabli, koje su po defaultu privatan.

Rani izlazak iz VBA procedura “Funkcija” i “Sub”

Ako trebate prekinuti izvršavanje VBA procedure funkcija or Izmjene, bez čekanja na njegov prirodni završetak, onda za to postoje operatori Izlaz funkcija и Izlaz iz pod. Upotreba ovih operatora je prikazana u nastavku koristeći jednostavnu proceduru kao primjer. funkcijaA koji očekuje da će dobiti pozitivan argument za obavljanje daljih operacija. Ako je nepozitivna vrijednost proslijeđena proceduri, tada se ne mogu izvoditi daljnje operacije, tako da korisniku treba prikazati poruku o grešci i postupak treba odmah izaći:

Funkcija VAT_Amount(sVAT_Rate As Single) Kao pojedinačni PDV_Amount = 0 Ako sVAT_Rate <= 0 Tada MsgBox "Očekivala pozitivnu vrijednost sVAT_Rate, ali je primljena" & sVAT_Rate Izlaz iz funkcije Kraj ako ... Kraj funkcije

Imajte na umu da prije završetka procedure funkcija - PDV_Iznos, ugrađena VBA funkcija je umetnuta u kod MsgBox, koji korisniku prikazuje iskačući prozor s upozorenjem.

Ostavite odgovor