Ugrađene vba funkcije. VBA Excel. Prilagođena funkcija (sintaksa, komponente). Stvaranje funkcije u VBA s više argumenata

Funkcija napisana u VBA je kod koji izvodi izračun i vraća vrijednost (ili niz vrijednosti). Nakon što stvorite funkciju, možete je koristiti na tri načina:

  1. Kao formula na radnom listu, gdje može uzimati argumente i vraćati vrijednosti.
  2. Kao dio vaše VBA rutine. U Sub proceduri ili unutar drugih funkcija.
  3. U pravilima uvjetnog oblikovanja.

Iako Excel već sadrži više od 450 ugrađenih funkcija, one također ponekad nedostaju. Ponekad ugrađene funkcije ne mogu učiniti ono što želite. Ponekad, da biste postigli rezultat, morate stvoriti ogromnu i složenu formulu koja nije razumljiva drugima. U tom slučaju možete izraditi prilagođenu funkciju koju je lako čitati i koristiti.

Imajte na umu da su korisnički definirane funkcije stvorene s VBA općenito znatno sporije od ugrađenih funkcija. Stoga su najprikladniji za situacije u kojima ne možete dobiti rezultat pomoću ugrađenih funkcija ili nema puno računanja, a smanjenje performansi nije kritično.

Ne samo vi, već i vaši kolege možete koristiti ugrađene funkcije. Funkcije koje napišete pojavit će se pored ostalih u dijaloškom okviru Čarobnjaka za funkcije. Možda ćete se uplašiti procesa stvaranja funkcija, ali žurno vas uvjeravam da je vrlo jednostavan.

Koja je razlika između procedure (Sub) i funkcije (Function)?

Glavna razlika je u tome što se procedura (pod) koristi za izvršavanje skupa naredbi i nije namijenjena, za razliku od funkcije (funkcije), za vraćanje vrijednosti (ili niza vrijednosti).

Za demonstraciju, navedimo primjer. Na primjer, postoji niz brojeva od 1 do 100 i morate odvojiti parne od neparnih.

Koristeći (pod)proceduru, možete, na primjer, proći kroz ćelije i ispunom označiti neparne. A funkcija se može koristiti u susjednom stupcu i vratit će TRUE ili FALSE ovisno o tome je li vrijednost parna ili ne. Oni. nećete moći promijeniti boju ispune pomoću funkcije na radnom listu.

Stvaranje jednostavne korisnički definirane funkcije u VBA

Kreirajmo jednostavnu prilagođenu funkciju u VBA i vidimo kako sve to radi.

Ispod je kod za funkciju koja ostavlja samo brojeve iz teksta, odbacujući vrijednosti slova.

Funkcijski brojevi(Tekst kao niz) As Long Dim i As Long Dim rezultat Kao niz za i = 1 To Len(Text) If IsNumeric(Mid(Text, i, 1)) Then result = result & Mid(Text, i, 1 ) Sljedeći brojevi = CLng(rezultat) Kraj funkcije

Da bi vam sve radilo, morate umetnuti ovaj kod u modul knjige. Ako ne znate kako to učiniti, počnite s člankom Kako snimiti makronaredbu u Excelu.

Sada da vidimo kako funkcija radi, pokušajmo je upotrijebiti na listu:

Prije analize same funkcije, zabilježimo 2 ugodna trenutka koja su se pojavila nakon njezina stvaranja:

  • Postala je dostupna kao i svaka druga ugrađena funkcija (kako stvoriti skrivena funkcija, reći ćemo dalje).
  • Kada unesete znak "=" i počnete upisivati ​​naziv funkcije, Excel prikazuje sva podudaranja i prikazuje ne samo ugrađene funkcije, već i one prilagođene.

Analizirajmo funkciju korak po korak

Hajdemo sad dublje zaroniti i vidjeti kako je ova značajka stvorena. Funkcija počinje linijom

Funkcijski brojevi (tekst kao niz) Kao dugi

Riječ Funkcija govori o početku funkcije, nakon čega slijedi njen naziv, u našem slučaju Brojke.

  • Naziv funkcije ne smije sadržavati razmake. Također, ne možete pozvati funkciju ako se sudara s referentnim nazivom ćelije. Na primjer, ne možete dati naziv funkciji ABC123 jer se to ime također odnosi na ćeliju u Excel radnom listu.
  • Svojoj funkciji ne biste trebali dati isti naziv kao postojećoj funkciji. Ako to učinite, Excel će dati prednost ugrađenoj funkciji.
  • Možete koristiti podvlaku ako želite odvojiti riječi. Na primjer, Suma u kuirzivu je valjano ime.

Nakon naziva, u zagradama su opisani argumenti funkcije. Slično ugradbenom Excel funkcije. U našem slučaju, jedini korišteni argument je Tekst. Nakon naziva argumenta koji smo naveli Kao niz, to znači da je naš argument tekstualna vrijednost ili referenca na ćeliju koja sadrži tekstualnu vrijednost. Ako ne navedete vrstu podataka, VBA će je tretirati kao Varijanta(što znači da možete koristiti bilo koju vrstu podataka, VBA će to shvatiti umjesto vas).

Zadnji dio prvog reda Sve dok specificira tip podataka koji funkcija vraća. U našem slučaju, funkcija će vratiti cjelobrojne vrijednosti. Ovo također nije potrebno.

Drugi i treći red funkcije deklariraju dodatne interne varijable koje ćemo koristiti.

Dim i As Long Dim rezultat kao niz

Varijabilna ja koristit ćemo ga za nabrajanje znakova. Varijabla proizlaziti za pohranjivanje međurezultata funkcije.

Zadatak funkcije je proći kroz sve znakove u varijabli Text i spremiti samo one koji su brojevi. Stoga ćemo započeti petlju od 1 do zadnjeg znaka.

Za i = 1 To Len (tekst)

Len je funkcija koja određuje broj znakova.

Glavna linija funkcije je provjera je li sljedeći znak teksta broj i, ako jest, pohranjivanje u varijablu rezultata

If IsNumeric(Mid(Text, i, 1)) Then result = result & Mid(Text, i, 1)

Za ovo nam je potrebna funkcija JeNumeric- uzvraća ona Pravi ako je tekst broj i lažno inače.

Funkcija Sredina preuzima iz argumenta Text ja znak (značenje 1 , označava da funkcija Sredina zauzima samo 1 znak)/

Funkcija Sljedeći- zatvara petlju Za ovdje je sve jasno.

Brojevi = CLng(rezultat)

Ovom linijom pretvaramo tekstualnu varijablu proizlaziti, koji sadrži sve znamenke argumenta Tekst, V numerička vrijednost. I kažemo koji bi rezultat naša funkcija trebala ispisati Brojke.

Posljednji red koda je Završna funkcija. Ovo je obavezna linija koda koja govori VBA da kod funkcije ovdje završava.

Gornji kôd opisuje različite dijelove tipične korisnički definirane funkcije stvorene u VBA. U budućim člancima detaljnije ćemo se pozabaviti ovim elementima i također pogledati razne načine izvršenje VBA funkcije u Excelu.

Dim nRezultat kao cijeli broj

nMult1 = CInt(InputBox("Unesite prvi broj: ")) nMult2 = CInt(InputBox("Unesite drugi broj: ")) nRezultat = fMultiply(nMult1, nMult2)

Selection.InsertAfter nResult Selection.Collapse wdCollapseEnd

4. Za komentiranje koda AutoNew() , označite sav kod za ovu proceduru (uključujući Javni Sub AutoNew() i End Sub ) i kliknite gumb Blokiraj komentar na alatnoj traci Uredi.

3.9. Ugrađene funkcije VBA jezika

3.9.1. Što su ugrađene funkcije

U Programski jezik VBA nudi nekoliko desetakaugrađene funkcije. Dostupni su u bilo kojem programu na VBA jeziku i nije bitno u kojem se programskom proizvodu nalazimo - Excel, Word, Access ili, primjerice, AutoCAD. Koriste se vrlo aktivno, au mnogim situacijama bez njih se ne može. Profesionalni programeri ih koriste potpuno automatski, ali obične korisnike bih savjetovao da provedu nekoliko sati upoznavajući ih, jer bez poznavanja ovih funkcija neće moći učinkovito raditi u VBA. Dodatni argument u prilog njihovom proučavanju je to što se gotovo identičan skup funkcija nalazi u uobičajenom Visual Basic i VBScript, a mnoge od ovih funkcija s istim nazivima i sintaksom nalaze se u drugim programskim jezicima - C++, Delphi, Java, JavaScript itd.

U U VBA pomoći, ugrađene funkcije grupirane su po slovu (Sl. 3.2).

Mnogi sudionici tečajeva postavili su pitanje: postoji li pomoć za ove funkcije na ruskom? Nažalost, nisam mogao pronaći takav certifikat, pa ću ga pokušati dostaviti kratka informacija u ovoj knjizi. Zatim ćemo govoriti o većini aktivno korištenih funkcija jezika VBA (matematičke funkcije poput kosinusa ili tangensa, koje su praktični rad gotovo nikada ne koriste, a nećemo razmatrati financijske funkcije). Kako bismo uštedjeli prostor, nećemo dati punu sintaksu funkcija: najvažnije je razumjeti što svaka funkcija radi i u kojim situacijama se može koristiti.

Funkcije u sljedećim odjeljcima grupirane su prema funkcionalnosti. Ako trebate pronaći informacije jednostavno prema nazivu funkcije, možete koristiti kazalo na kraju knjige.

Riža. 3.2. Ugrađene funkcije Pomoć

3.9.2. Funkcije pretvorbe i provjere tipa podataka

U VBA programima vrlo je uobičajeno pretvarati vrijednosti iz jedne vrste podataka u drugu. Evo nekoliko tipičnih situacija kada to morate učiniti:

pretvaranje iz string vrijednosti u numeričku vrijednost prilikom primanja vrijednosti od korisnika preko InputBox() ;

Pretvaranje vrijednosti datuma/vremena u vrijednost niza kada trebamo dosljedno prikazati datum ili vrijeme bez obzira na regionalne postavke na korisničkim računalima;

pretvaranje vrijednosti iz niza u datum/vrijeme za korištenje posebnih funkcija datuma/vremena.

Najčešće se za pretvaranje tipova podataka koriste funkcije čiji se naziv sastoji od prefiksa “C” (od riječi Convert) i naziva tipa podataka. Popis ovih funkcija je sljedeći: CBool(), CByte(), CCur(), CDate(),

CDbl(), CDec(), CInt(), CLng(), CSng(), CStr(), CVar(), CVDate(), CVErr().

Možete vidjeti što se na kraju dogodilo pomoću funkcije TypeName(), koja vraća naziv korištenog tipa podataka, na primjer:

nVar1 = CInt(InputBox("Unesite vrijednost")) MsgBox TypeName(nVar1)

U tom će slučaju ova funkcija vratiti "Integer" .

Osim toga, postoji nekoliko drugih funkcija korisnih za konverziju.

Str() - omogućuje pretvaranje numeričke vrijednosti u niz. Radi gotovo isto što i CStr(), ali umeće razmak prije pozitivnih brojeva.

Val() - "izvlači" samo numeričku vrijednost iz mješavine brojeva i slova. U tom slučaju funkcija čita podatke slijeva nadesno i zaustavlja se na prvoj nenumeričkoj vrijednosti (jedina dopuštena nenumerička vrijednost je točka, koja će odvojiti cijeli broj od razlomka). Vrlo je zgodno kada zapisujemo mjerne jedinice ili valutu isprepletene numeričkim podacima.

IsNumeric() i IsDate() - provjerite dosljednost vrijednosti kako ne bi došlo do pogrešaka tijekom pretvorbe. Da biste provjerili usklađenost s posebnim vrijednostima, možete koristiti funkcije IsArray(), IsEmpty(),

IsError(), IsMissing(), IsNull() i IsObject() . Sve te funkcije se vraćaju

Točno ili netočno ovisno o rezultatima provjere vrijednosti koja im je proslijeđena.

Hex() i Oct() - Pretvorite decimalne podatke u prikaz niza heksadecimalnih i oktalnih vrijednosti.

3.9.3. String funkcije

Ovo su najčešće korištene funkcije. Stalno su potrebni i morate ih jako dobro poznavati.

Asc() - ova vam funkcija omogućuje vraćanje numeričkog koda za proslijeđeni znak. Na primjer, Asc("D") će vratiti 68. Ova je funkcija korisna za određivanje sljedećeg ili prethodnog slova. Obično se koristi zajedno s funkcijom Chr(), koja izvodi inverznu operaciju - vraća znak prema njegovom numeričkom kodu. Na primjer, ovaj kod u Excelu omogućuje vam uzastopno pisanje slova ruske abecede od A do U u ćelije A1 do A20:

Dim n, nCharCode kao cijeli broj n = 1

nCharCode = Asc("A") Do While n<= 20

ActiveWorkbook.ActiveSheet.Range("A" & n).Value = Chr(nCharCode)

VBA sintaksa i programske konstrukcije

nCharCode = nCharCode + 1 petlja

Varijante ove funkcije su AscB() i AscW() . AscB() vraća samo prvi bajt numeričkog koda za znak, dok AscW() vraća Unicode kod za znak.

Chr() - vraća znak prema njegovom numeričkom kodu. Osim što se koristi zajedno s funkcijom Asc() (pogledajte prethodni primjer), bez nje ne možete u još jednoj situaciji: kada trebate ispisati servisni znak. Na primjer, trebamo upisati vrijednost "Gazprom" (u navodnicima) u Wordu. Navodnik je servisni znak i pokušaj korištenja niza poput:

Selection.Text = ""Gazprom""

rezultirat će sintaktičkom pogreškom. I ovako će sve biti u redu:

Selection.Text = Chr(34) & "Gazprom" & Chr(34)

Postoje varijante ove funkcije - ChrB() i ChrW(). Rade slično kao iste opcije za funkciju Asc().

InStr() i InStrRev() neke su od najpopularnijih funkcija. Omogućuje otkrivanje niza znakova u tijelu varijable niza i vraćanje njezinog položaja. Ako niz nije pronađen, vraća se 0. Funkcija InStr() pretražuje od početka niza, a InStrRev() pretražuje od kraja.

Lijevo(), Desno(), Srednje() - omogućuju vam da uzmete broj znakova koji navedete iz postojeće varijable niza s lijeve, desne ili srednje strane.

Len() - vraća broj znakova u nizu (duljina niza). Često se koristi s petljama, operacijama zamjene itd.

LCase() i UCase() - pretvaraju niz u mala i velika slova. Često se koristi za pripremu vrijednosti za usporedbu kada velika i mala slova nisu važna (prezimena, nazivi tvrtki, gradova itd.).

LSet() i RSet() - ispunjavaju jednu varijablu simbolima druge bez promjene njezine duljine (lijevo i desno, redom). Dodatni znakovi su odrezani, a razmaci su zamijenjeni znakovima koji nedostaju.

LTrim() , RTrim() , Trim() - uklanjaju razmake s lijeve, desne ili s lijeve i desne strane.

Replace() - zamjenjuje jedan niz znakova drugim u nizu.

Razmak() i String() - vraćaju niz od broja razmaka ili znakova koje navedete. Obično se koristi za oblikovanje

Funkcija-postupak je posebna vrsta VBA procedure koja vraća rezultat. Korisnički definirane procedure, poput funkcija ugrađenih u VBA, mogu imati neobavezne i imenovane argumente. Ne možete koristiti snimač makronaredbi za snimanje funkcije procedure, iako možete uređivati ​​makronaredbu koju je snimio snimač i pretvoriti je u funkciju procedure.

Glavna razlika između funkcije procedure i drugih procedura, osim činjenice da funkcije vraćaju vrijednost, a procedure ne, jest da funkcija procedure koristi ključne riječi Funkcija I Završna funkcija.

Sintaksa:

Naziv funkcije()
"VBA Izjave
Završna funkcija

Funkcija je ključna riječ koja deklarira početak funkcije.

Naziv - naziv funkcije. Imena funkcija slijede ista pravila kao i druga imena VBA identifikatora.

Arglist - popis argumenata za ovu funkciju, izborni element.

Vrsta - bilo koja vrsta povratne vrijednosti funkcije. Ako je tip nedefiniran, rezultat koji vraća funkcija procedure je tipa Variant.

Naziv = izraz je dodjela funkcije koja VBA-u govori koju bi vrijednost funkcija trebala vratiti, neobavezan element. Međutim, uvijek biste trebali uključiti operator dodjele u funkcije procedure.

End Function - ključne riječi koje završavaju funkciju.


Čak i ako funkcija nema argumenata (na primjer, Sada, Datum), morate koristiti zagrade u deklaraciji funkcije.

Obično je funkcija dizajnirana za izvođenje izračuna i vraćanje rezultata. Kada deklarirate funkciju procedure, navodite naziv svakog argumenta proslijeđenog funkciji. Imena argumenata na popisu odvojena su zarezom i moraju slijediti pravila koja se primjenjuju na bilo koji VBA identifikator.


Ispod je popis upotrebe funkcije jednostavne procedure koja uklanja razmake na početku i na kraju i broji broj znakova u izrazu.



Bez korištenja funkcije, popis bi izgledao ovako:



Iz ovog jednostavnog primjera, mislim da je glavna ideja korištenja proceduralnih funkcija jasna - poboljšanje čitljivosti programskog koda i njegovo smanjenje (drugim riječima, proceduralna funkcija je napisana kada se isti "komad" koda pojavljuje više od 2 -3 puta u programskom kodu). Doista, ako se naša proceduralna funkcija ne sastoji od jednog retka, već, recimo, od 10 redaka; a programski kod bi koristio ovu funkciju procedure 5 puta, tada bi ukupni popis programa bio 38 redaka kraći.


Kao što je ranije rečeno, VBA prosljeđuje sve argumente funkcijskoj proceduri kao Variant tipove. Možete deklarirati specifične tipove podataka za svaki argument na popisu argumenata.

Prije nego počnete stvarati vlastite VBA funkcije, korisno je znati da Excel VBA ima veliku zbirku unaprijed izgrađenih ugrađenih funkcija koje možete koristiti prilikom pisanja koda.

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

  • Otvorite Excel radnu knjigu i pokrenite VBA editor (kliknite ovdje Alt+F11), a zatim kliknite F2.
  • Odaberite biblioteku s padajućeg popisa u gornjem lijevom kutu zaslona VBA.
  • Pojavljuje se popis ugrađenih VBA klasa i funkcija. Kliknite na naziv funkcije za prikaz kratkog opisa na dnu prozora. Pritiskom F1 otvorit će internetsku stranicu pomoći za tu funkciju.

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

Prilagođena funkcija i potprocedure u VBA

U programu Excel Visual Basic skup naredbi koje izvršavaju određeni zadatak smješten je u proceduru Funkcija(Funkcija) ili Pod(Podrutina). Glavna razlika između postupaka Funkcija I Pod je li to procedura Funkcija vraća rezultat, postupak Pod- 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 postupak Pod.

Argumenti

Razni podaci mogu se proslijediti VBA procedurama pomoću argumenata. Popis argumenata naveden je prilikom deklaracije procedure. Na primjer, postupak Pod u VBA, dodaje navedeni 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

Budite svjesni toga da imate argumente za postupke Funkcija I Pod 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, deklarirali biste ga ovako:

Sub AddToCells(Optional i As Integer = 0)

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

U proceduri može postojati nekoliko izbornih argumenata; 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 ona izađe.
  • Autor Ref– prosljeđivanje argumenta referencom. To jest, proceduri se prosljeđuje stvarna adresa argumenta u memoriji. Sve promjene napravljene na argumentu unutar procedure bit će spremljene kada procedura izađe.

Korištenje ključnih riječi ByVal ili Autor Ref U deklaraciji procedure možete točno odrediti kako se argument prosljeđuje proceduri. Ovo je dolje ilustrirano primjerima:

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 ili Autor Ref, onda će argument biti proslijeđen referencom.

Prije nego nastavite s učenjem postupaka Funkcija I Pod Detaljnije, bilo bi korisno još jednom pogledati značajke i razlike između ove dvije vrste postupaka. Slijedi kratka rasprava o VBA procedurama Funkcija I Pod i prikazani su jednostavni primjeri.

VBA procedura "Funkcija"

VBA editor prepoznaje postupak Funkcija

Funkcija...Krajnja funkcija

Kao što je ranije spomenuto, postupak Funkcija u VBA (za razliku od Pod), 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 savršeno ilustrirano u sljedećem primjeru.

Primjer VBA procedure “Funkcija”: Izvođenje matematičke operacije s 3 broja

Ispod je primjer VBA koda procedure Funkcija, koji uzima tri argumenta tipa Dvostruko(brojevi s pomičnim zarezom dvostruke preciznosti). Kao rezultat, procedura vraća drugi broj tog tipa Dvostruko, jednako 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

Ovo je vrlo jednostavan VBA postupak 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 govore ovo Kao Double nakon popisa argumenata). Ovaj primjer također pokazuje kako rezultat postupka Funkcija pohranjuje se u varijablu s istim imenom kao i ime procedure.

Pozivanje VBA procedure "Funkcija"

Ako jednostavnim postupkom koji je gore razmotren 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.

Pozivanje VBA procedure "Funkcija" iz druge procedure

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

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

Pozivanje VBA procedure "Funkcija" 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 FunkcijaZbrojMinus može se pozvati unošenjem sljedećeg izraza u ćeliju radnog lista:

ZbrojMinus(10, 5, 2)

VBA procedura "Sub"

Urednik VBA shvaća da je pred njim procedura Pod, kada naiđe na grupu naredbi zatvorenih između sljedećih početnih i završnih naredbi:

Pod... Kraj Pod

VBA procedura "Sub": Primjer 1. Centriranje i promjena veličine fonta u odabranom rasponu ćelija

Pogledajmo primjer jednostavne VBA procedure Pod, čija je zadaća promijeniti formatiranje odabranog raspona ćelija. Ćelije su postavljene na središnje poravnanje (okomito i vodoravno), a veličina fonta mijenja se u onu koju odredi 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 Pod izvodi akcije, ali ne vraća rezultate.

Ovaj primjer također koristi opcijski argument iFontSize. Ako argument iFontSize nije prošao u proceduru Pod, tada se njegova zadana vrijednost uzima kao 10. Međutim, ako argument iFontSize prešao u proceduru Pod, tada će veličina fonta koju odredi korisnik biti postavljena u odabranom rasponu ćelija.

VBA postupak “Sub”: Primjer 2. Središnje poravnanje i primjena podebljanja na font u odabranom rasponu ćelija

Sljedeći postupak je sličan onome o kojem smo upravo govorili, ali ovaj put, umjesto promjene veličine, primjenjuje podebljani stil fonta na odabrani raspon ćelija. Ovo je primjer postupka Pod, kojem se ne prosljeđuju argumenti:

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

Pozivanje procedure "Sub" u programu Excel VBA

Pozivanje VBA procedure "Sub" iz druge procedure

Za pozivanje VBA procedure Pod iz druge VBA procedure morate zapisati ključnu riječ Poziv, naziv postupka Pod a zatim u zagradama argumente 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

Pozivanje VBA procedure "Sub" s radnog lista

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

Evo jednostavnog načina za pokretanje (ili izvršenje) procedure Pod, dostupno na radnom listu:

  • Klik Alt+F8(pritisnite tipku Alt i dok je držite pritisnutu, pritisnite tipku F8).
  • Na popisu makronaredbi koji se pojavi odaberite onu koju želite pokrenuti.
  • Klik Izvršiti(Trčanje)

Za izvođenje postupka Pod brzo i jednostavno, možete mu dodijeliti kombinaciju tipki. Za ovo:

  • Klik Alt+F8.
  • Na popisu makronaredbi koji se pojavi odaberite onu kojoj želite dodijeliti tipkovni prečac.
  • Klik Mogućnosti(Opcije) i unesite tipkovni prečac u dijaloški okvir koji se pojavi.
  • Klik u redu i zatvorite dijaloški okvir Makro(Makro).

Pažnja: Kada dodjeljujete tipkovni prečac makronaredbi, provjerite da se ne koristi kao standardni u Excelu (npr. Ctrl+C). Ako odaberete 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 temi opsega varijabli i konstanti i ulozi ključnih riječi Javnost I Privatna. Ove se ključne riječi također mogu koristiti u vezi s VBA procedurama:

Upamtite da ako prije deklariranja VBA procedure Funkcija ili Pod ključna riječ nije umetnuta, postavlja se zadano svojstvo za proceduru Javnost(odnosno, bit će dostupan posvuda u određenom VBA projektu). Ovo se razlikuje od deklariranja varijabli, koje prema zadanim postavkama jesu Privatna.

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

Ako trebate prekinuti izvođenje VBA procedure Funkcija ili Pod, bez čekanja na njegov prirodni završetak, onda za to postoje operatori Izlaz iz funkcije I Izlaz Sub. Korištenje ovih operatora prikazano je u nastavku pomoću primjera jednostavnog postupka Funkcija, koji očekuje da će dobiti pozitivan argument za izvođenje daljnjih operacija. Ako se proceduri proslijedi nepozitivna vrijednost, tada se ne mogu izvesti daljnje operacije, pa se korisniku mora pokazati poruka o pogrešci i procedura se mora odmah prekinuti:

Funkcija VAT_Amount(sVAT_Rate As Single) Kao pojedinačni VAT_Amount = 0 Ako je 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 FunkcijaPDV_iznos, ugrađena VBA funkcija umetnuta je u kod MsgBox, koji korisniku prikazuje skočni prozor upozorenja.

Prilikom pisanja VBA koda u Excelu u svakom se koraku koristi skup ugrađenih operatora. Ovi se operatori dijele na matematičke, nizove, usporedbe i logičke operatore. Zatim ćemo detaljno pogledati svaku grupu operatora.

Matematički operatori

Osnovni VBA matematički operatori navedeni su u donjoj tablici.

Desni stupac tablice prikazuje zadani prioritet operatora bez zagrada. Dodavanjem zagrada u izraz možete promijeniti redoslijed u kojem se izvode VBA naredbe po želji.

String operatori

Glavni operator niza u Excel VBA je operator ulančavanja & (sjediniti):

Operatori usporedbe

Operatori usporedbe koriste se za usporedbu dva broja ili niza i vraćanje Booleove vrijednosti kao što je Booleov(Istina ili laž). Glavni operatori Excel VBA za usporedbu navedeni su u ovoj tablici:

Logički operatori

Logički operatori, poput operatora usporedbe, vraćaju Booleovu vrijednost tipa Booleov(Istina ili laž). Osnovni Excel VBA logički operatori navedeni su u donjoj tablici:

Gornja tablica ne navodi sve Booleove operatore dostupne u VBA. Potpuni popis logičkih operatora može se pronaći u Visual Basic Developer Center.

Ugrađene funkcije

Postoje mnoge ugrađene funkcije dostupne u VBA koje se mogu koristiti prilikom pisanja koda. U nastavku su neki od najčešće korištenih:

Funkcija Akcijski
Trbušnjaci Vraća apsolutnu vrijednost zadanog broja.
  • Trbušnjaci (-20) vraća vrijednost 20;
  • Trbušnjaci (20) vraća vrijednost 20.
Chr Vraća ANSI znak koji odgovara numeričkoj vrijednosti parametra.
  • Chr (10) vraća prijelom retka;
  • Chr (97) vraća znak a.
Datum Vraća trenutni sistemski datum.
Dodavanje datuma Dodaje određeni vremenski interval određenom datumu. Sintaksa funkcije:

Dodavanje datuma( interval , broj , datum )

Gdje je argument interval definira tip vremenskog intervala koji se dodaje zadanom datum u iznosu navedenom u argumentu broj .

Argument interval može uzeti jednu od sljedećih vrijednosti:

  • DateAdd(“d”, 32, “01/01/2015”) dodaje 32 dana na datum 01/01/2015 i tako vraća datum 02/02/2015.
  • DateAdd("ww", 36, "01.01.2015.") dodaje 36 tjedana na datum 01.01.2015. i vraća datum 09.09.2015.
DateDiff Izračunava broj navedenih vremenskih intervala između dva dana.
  • DateDiff(“d”, “01/01/2015”, “02/02/2015”) izračunava broj dana između datuma 01/01/2015 i 02/02/2015, vraćajući rezultat 32.
  • DateDiff(“ww”, “01/01/2015”, “03/03/2016”) izračunava broj tjedana između datuma 01/01/2015 i 03/03/2016, vraćajući rezultat 61.
Dan Vraća cijeli broj koji odgovara danu u mjesecu zadanog datuma.

Primjer: Dan ("29.01.2015.") vraća broj 29.

Sat Vraća cijeli broj koji odgovara broju sati u zadanom vremenu.

Primjer: Sat (“22:45:00”) vraća broj 22.

InStr Uzima cijeli broj i dva niza kao argumente. Vraća položaj pojavljivanja drugog niza unutar prvog, započinjući pretraživanje na položaju određenom cijelim brojem.
  • InStr(1, “Ovdje je riječ koju tražite”, “riječ”) vraća broj 13.
  • InStr(14, “Ovdje je riječ za pretraživanje, a ovdje je još jedna riječ za pretraživanje”, “riječ”) vraća broj 38.

Bilješka: Argument broja možda nije naveden, u kojem slučaju pretraživanje počinje od prvog znaka niza navedenog u drugom argumentu funkcije.

Int Vraća cijeli broj zadanog broja.

Primjer: Int (5,79) vraća rezultat 5.

Isdate Povratak Pravi ako je dana vrijednost datum, ili lažno– ako nije spoj.
  • IsDate(“1.1.2015.”) vraća Pravi;
  • IsDatum (100) vraća lažno.
IsError Povratak Pravi, ako je navedena vrijednost pogreška, ili lažno– ako nije greška.
Nedostaje Naziv opcijskog argumenta procedure prosljeđuje se kao argument funkciji. Nedostaje vraća Pravi, ako nije proslijeđena vrijednost za predmetni argument procedure.
JeNumeric Povratak Pravi ako se dana vrijednost može smatrati brojem, inače vraća lažno.
Lijevo Vraća navedeni broj znakova od početka proslijeđenog niza. Sintaksa funkcije je sljedeća:

Lijevo( crta , duljina )

Gdje crta je izvorni niz, i duljina– broj vraćenih znakova, računajući od početka retka.

  • Lijevo ("abvgdezziklmn", 4) vraća niz “abvg”;
  • Lijevo ("abvgdezziklmn", 1) vraća niz "a".
Len Vraća broj znakova u nizu.

Primjer: Len ("abvgdez") vraća broj 7.

Mjesec Vraća cijeli broj koji odgovara mjesecu zadanog datuma.

Primjer: Mjesec ("29.01.2015.") vraća vrijednost 1.

Sredina Vraća određeni broj znakova iz sredine proslijeđenog niza. Sintaksa funkcije:

Sredina ( crta , Početak , duljina )

Gdje crta je izvorni niz Početak– položaj početka izdvojenog niza, duljina– broj znakova koje treba izdvojiti.

  • Sredina ("abvgdezziklmn", 4, 5) vraća niz "gdje";
  • Sredina ("abvgdezziklmn", 10, 2) vraća niz “cl”.
Minuta Vraća cijeli broj koji odgovara broju minuta u određenom vremenu. Primjer: Minuta ("22:45:15") vraća vrijednost 45.
Sada Vraća trenutni sistemski datum i vrijeme.
Pravo Vraća navedeni broj znakova s ​​kraja proslijeđenog niza. Sintaksa funkcije:

Pravo( crta , duljina )

Gdje crta je izvorni niz, i duljina– ovo je broj znakova koje je potrebno izdvojiti, računajući od kraja zadanog niza.

  • Desno ("abvgdezziklmn", 4) vraća niz “clmn”;
  • Desno ("abvgdezziklmn", 1) vraća niz "n".
Drugi Vraća cijeli broj koji odgovara broju sekundi u zadanom vremenu.

Primjer: Drugi ("22:45:15") vraća vrijednost 15.

Sqr Vraća kvadratni korijen numeričke vrijednosti proslijeđene kao argument.
  • Sqr (4) vraća vrijednost 2;
  • Sqr (16) vraća vrijednost 4.
Vrijeme Vraća trenutno vrijeme sustava.
Ubound Vraća gornji indeks dimenzije navedenog polja.

Bilješka: Za višedimenzionalne nizove, izborni argument može odrediti indeks koje dimenzije treba vratiti. Ako nije navedeno, zadana vrijednost je 1.