Vgrajene funkcije vba. VBA Excel. Funkcija po meri (sintaksa, komponente). Ustvarjanje funkcije v VBA z več argumenti

Funkcija, napisana v VBA, je koda, ki izvede izračun in vrne vrednost (ali niz vrednosti). Ko ustvarite funkcijo, jo lahko uporabljate na tri načine:

  1. Kot formula na delovnem listu, kjer lahko sprejme argumente in vrne vrednosti.
  2. Kot del vaše rutine VBA. V subproceduri ali znotraj drugih funkcij.
  3. V pravilih pogojnega oblikovanja.

Čeprav Excel vsebuje že več kot 450 vgrajenih funkcij, jih včasih tudi premalo. Včasih vgrajene funkcije ne morejo narediti, kar želite. Včasih morate za dosego rezultata ustvariti ogromno in zapleteno formulo, ki drugim ni razumljiva. V tem primeru lahko ustvarite funkcijo po meri, ki jo je enostavno brati in uporabljati.

Upoštevajte, da so uporabniško določene funkcije, ustvarjene z VBA, na splošno precej počasnejše od vgrajenih funkcij. Zato so najprimernejši za situacije, ko ne morete dobiti rezultata z vgrajenimi funkcijami ali ni veliko računanja in kazen zmogljivosti ni kritična.

Ne samo vi, ampak tudi vaši sodelavci lahko uporabljate vgrajene funkcije. Funkcije, ki jih napišete, bodo prikazane poleg drugih v pogovornem oknu čarovnika za funkcije. Morda vas bo proces ustvarjanja funkcij prestrašil, vendar vam hitim zagotoviti, da je povsem preprost.

Kakšna je razlika med proceduro (Sub) in funkcijo (Function)?

Glavna razlika je v tem, da se procedura (pod) uporablja za izvajanje nabora ukazov in ni namenjena, za razliko od funkcije (funkcije), za vrnitev vrednosti (ali niza vrednosti).

Za dokaz navedimo primer. Na primer, obstaja niz števil od 1 do 100 in morate ločiti soda od lihih.

S pomočjo (pod)postopka lahko na primer greste skozi celice in s polnilom označite lihe. Funkcijo lahko uporabite v sosednjem stolpcu in bo vrnila TRUE ali FALSE, odvisno od tega, ali je vrednost soda ali ne. Tisti. ne boste mogli spremeniti barve polnila s funkcijo na delovnem listu.

Ustvarjanje preproste uporabniško definirane funkcije v VBA

Ustvarimo preprosto funkcijo po meri v VBA in poglejmo, kako deluje.

Spodaj je koda za funkcijo, ki iz besedila pusti samo številke, vrednosti črk pa zavržejo.

Številke funkcij (Besedilo kot niz) As Long Dim i As Long Dim rezultat Kot niz For i = 1 To Len(Text) If IsNumeric(Mid(Text, i, 1)) Then result = result & Mid(Text, i, 1 ) Naslednja števila = CLng(rezultat) Končna funkcija

Da bo vse delovalo za vas, morate vstaviti to kodo v knjižni modul. Če ne veste, kako to storiti, potem začnite s člankom Kako posneti makro v Excelu.

Zdaj pa poglejmo, kako funkcija deluje, poskusimo jo uporabiti na listu:

Preden analiziramo samo funkcijo, omenimo 2 prijetna trenutka, ki sta se pojavila po njenem ustvarjanju:

  • Postala je na voljo kot katera koli druga vgrajena funkcija (kako ustvariti skrita funkcija, bomo povedali naprej).
  • Ko vnesete znak "=" in začnete vnašati ime funkcije, Excel prikaže vsa ujemanja in ne prikaže samo vgrajenih funkcij, ampak tudi tiste po meri.

Analizirajmo funkcijo korak za korakom

Zdaj pa se poglobimo in poglejmo, kako je bila ta funkcija ustvarjena. Funkcija se začne s črto

Številke funkcij (Besedilo kot niz) Kot dolgo

Beseda funkcija govori o začetku funkcije, ki ji sledi njeno ime, v našem primeru Številke.

  • Ime funkcije ne sme vsebovati presledkov. Prav tako ne morete poklicati funkcije, če je v koliziji s sklicnim imenom celice. Funkcije na primer ne morete poimenovati ABC123, ker se to ime nanaša tudi na celico v Excelovem delovnem listu.
  • Svoji funkciji ne smete dati enakega imena kot obstoječi funkciji. Če to storite, bo Excel dal prednost vgrajeni funkciji.
  • Če želite ločiti besede, lahko uporabite podčrtaj. na primer Suma v kurzivu je veljavno ime.

Za imenom so v oklepajih opisani argumenti funkcije. Podobno kot vgradni Excelove funkcije. V našem primeru je edini uporabljen argument Besedilo. Za imenom argumenta, ki smo ga navedli Kot niz, to pomeni, da je naš argument vrednost besedila ali sklic na celico, ki vsebuje besedilno vrednost. Če ne določite podatkovnega tipa, ga bo VBA obravnaval kot Različica(kar pomeni, da lahko uporabite katero koli vrsto podatkov, VBA bo to ugotovil namesto vas).

Zadnji del prve vrstice Tako dolgo določa vrsto podatkov, ki jih funkcija vrne. V našem primeru bo funkcija vrnila celoštevilske vrednosti. To tudi ni potrebno.

Druga in tretja vrstica funkcije deklarirata dodatne notranje spremenljivke, ki jih bomo uporabili.

Dim i As Long Dim rezultat kot niz

Spremenljivka jaz uporabili ga bomo za naštevanje znakov. Spremenljivka rezultat za shranjevanje vmesnega rezultata funkcije.

Naloga funkcije je pregledati vse znake v spremenljivki Text in shraniti samo tiste, ki so številke. Zato bomo zanko začeli od 1 do zadnjega znaka.

Za i = 1 To Len(besedilo)

Len je funkcija, ki določa število znakov.

Glavna vrstica funkcije je preverjanje, ali je naslednji znak besedila številka, in če je, ga shrani v spremenljivko rezultata

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

Za to potrebujemo funkcijo IsNumeric- se vrne Pravče je besedilo številka in False drugače.

funkcija sredina vzame iz argumenta Besedilo jaz znak (pomen 1 , pomeni, da funkcija sredina sprejme samo 1 znak)/

funkcija Naslednji- zapre zanko Za tukaj je vse jasno.

Številke = CLng(rezultat)

S to vrstico pretvorimo besedilno spremenljivko rezultat, ki vsebuje vse števke argumenta Besedilo, V številčna vrednost. In povemo, kakšen rezultat naj izpiše naša funkcija Številke.

Zadnja vrstica kode je Končna funkcija. To je obvezna vrstica kode, ki VBA pove, da se koda funkcije tukaj konča.

Zgornja koda opisuje različne dele tipične uporabniško definirane funkcije, ustvarjene v VBA. V prihodnjih člankih si bomo te elemente podrobneje ogledali in jih tudi pogledali različne načine izvedba funkcije VBA v Excelu.

Dim nResult As Integer

nMult1 = CInt(InputBox("Vnesite prvo številko: ")) nMult2 = CInt(InputBox("Vnesite drugo številko:")) nResult = fMultiply(nMult1, nMult2)

Selection.InsertAfter nResult Selection.Collapse wdCollapseEnd

4. Za komentiranje kode AutoNew() , označite vso kodo za ta postopek (vključno z Public Sub AutoNew() in End Sub ) in kliknite gumb Blokiraj komentar v orodni vrstici za urejanje.

3.9. Vgrajene jezikovne funkcije VBA

3.9.1. Kaj so vgrajene funkcije

IN Programski jezik VBA ponuja več desetvgrajene funkcije. Na voljo so v katerem koli programu v jeziku VBA in ni pomembno, v katerem programskem izdelku se nahajamo – Excel, Word, Access ali na primer AutoCAD. Uporabljajo se zelo aktivno in v mnogih situacijah brez njih ne gre. Profesionalni programerji jih uporabljajo popolnoma avtomatsko, navadnim uporabnikom pa bi svetoval, da se z njimi seznanijo več ur, saj brez poznavanja teh funkcij ne bodo mogli učinkovito delati v VBA. Dodaten argument v prid njihovemu preučevanju je, da je skoraj identičen nabor funkcij v običajnem Visual basic in VBScript, številne od teh funkcij z istimi imeni in sintakso pa najdemo v drugih programskih jezikih - C++, Delphi, Java, JavaScript itd.

IN V pomoči VBA so vgrajene funkcije razvrščene po črkah (slika 3.2).

Mnogi udeleženci tečajev so zastavili vprašanje: ali obstaja pomoč pri teh funkcijah v ruščini? Žal takega potrdila nisem našel, zato ga bom poskusil zagotoviti kratke informacije v tej knjigi. Nato bomo govorili o večini aktivno uporabljenih funkcij jezika VBA (matematične funkcije, kot sta kosinus ali tangens, ki so praktično delo se skoraj nikoli ne uporabljajo, finančnih funkcij pa ne bomo upoštevali). Zaradi prihranka prostora ne bo navedena celotna sintaksa funkcij: glavna stvar je razumeti, kaj vsaka funkcija počne in v kakšnih situacijah jo je mogoče uporabiti.

Funkcije v naslednjih razdelkih so razvrščene po funkcionalnosti. Če želite informacije najti preprosto po imenu funkcije, lahko uporabite kazalo na koncu knjige.

riž. 3.2. Pomoč za vgrajene funkcije

3.9.2. Funkcije za pretvorbo in preverjanje vrste podatkov

V programih VBA je zelo pogosto pretvorba vrednosti iz ene vrste podatkov v drugo. Tukaj je nekaj tipičnih situacij, ko morate to storiti:

pretvorba iz vrednosti niza v številsko vrednost, ko prejme vrednost od uporabnika preko InputBox() ;

Pretvarjanje vrednosti datuma/časa v vrednost niza, ko moramo dosledno prikazati datum ali čas ne glede na regionalne nastavitve v računalnikih uporabnikov;

pretvorbo vrednosti iz niza v datum/čas za uporabo posebnih funkcij datuma/časa.

Najpogosteje se za pretvorbo podatkovnih tipov uporabljajo funkcije, katerih ime je sestavljeno iz predpone "C" (iz besede Convert) in imena podatkovnega tipa. Seznam teh funkcij je naslednji: CBool(), CByte(), CCur(), CDate(),

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

Kaj se je na koncu zgodilo, lahko vidite s funkcijo TypeName(), ki vrne ime uporabljenega podatkovnega tipa, na primer:

nVar1 = CInt(InputBox("Vnesite vrednost")) MsgBox TypeName(nVar1)

V tem primeru bo ta funkcija vrnila "Integer" .

Poleg tega obstaja več drugih funkcij, uporabnih za pretvorbo.

Str() - omogoča pretvorbo številske vrednosti v niz. Dela skoraj enako kot CStr(), vendar vstavi presledek pred pozitivna števila.

Val() - "izvleče" samo številsko vrednost iz mešanice številk in črk. V tem primeru funkcija bere podatke od leve proti desni in se ustavi pri prvi neštevilski vrednosti (edina dovoljena neštevilska vrednost je pika, ki bo ločila celo število od ulomka). Zelo priročno je, ko zapišemo merske enote ali valute, vmes s številskimi podatki.

IsNumeric() in IsDate() - preverite doslednost vrednosti, tako da med pretvorbo ni napak. Za preverjanje skladnosti s posebnimi vrednostmi lahko uporabite funkcije IsArray(), IsEmpty(),

IsError(), IsMissing(), IsNull() in IsObject() . Vse te funkcije se vrnejo

True ali False, odvisno od rezultatov preverjanja vrednosti, ki jim je bila posredovana.

Hex() in Oct() - pretvori decimalne podatke v nizovno predstavitev šestnajstiških in osmiških vrednosti.

3.9.3. Funkcije nizov

To so najpogosteje uporabljene funkcije. Nenehno so potrebni in morate jih zelo dobro poznati.

Asc() - ta funkcija vam omogoča, da vrnete številsko kodo za posredovan znak. Na primer, Asc("D") vrne 68. Ta funkcija je uporabna za določanje naslednje ali prejšnje črke. Običajno se uporablja v povezavi s funkcijo Chr(), ki izvede inverzno operacijo – vrne znak glede na njegovo številčno kodo. Na primer, ta koda v Excelu vam omogoča zaporedno pisanje črk ruske abecede od A do U v celice A1 do A20:

Dim n, nCharCode kot celo število n = 1

nCharCode = Asc("A") Naredi Medtem ko n<= 20

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

VBA sintaksa in programski konstrukti

nCharCode = nCharCode + 1 zanka

Različici te funkcije sta AscB() in AscW(). AscB() vrne le prvi bajt številske kode za znak, AscW() pa vrne kodo Unicode za znak.

Chr() - vrne znak po številski kodi. Poleg tega, da se uporablja v povezavi s funkcijo Asc() (glejte prejšnji primer), brez nje ne morete storiti še v eni situaciji: ko morate izpisati storitveni znak. Na primer, v Word moramo vnesti vrednost "Gazprom" (v narekovajih). Narekovaj je servisni znak in poskus uporabe niza, kot je:

Selection.Text = ""Gazprom""

bo povzročil sintaktično napako. In tako bo vse v redu:

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

Obstajajo različice te funkcije - ChrB() in ChrW(). Delujejo podobno kot iste možnosti za funkcijo Asc().

InStr() in InStrRev() sta nekateri izmed najbolj priljubljenih funkcij. Omogoča zaznavanje zaporedja znakov v telesu spremenljivke niza in vrnitev njenega položaja. Če zaporedje ni najdeno, se vrne 0. Funkcija InStr() išče od začetka niza, InStrRev() pa od konca.

Left() , Right() , Mid() - omogočajo, da vzamete število znakov, ki jih določite, iz obstoječe spremenljivke niza na levi, desni ali sredini.

Len() - vrne število znakov v nizu (dolžina niza). Pogosto se uporablja z zankami, operacijami zamenjave itd.

LCase() in UCase() - pretvorita niz v male oziroma velike črke. Pogosto se uporablja za pripravo vrednosti za primerjavo, ko velike in male črke niso pomembne (priimki, imena podjetij, mest itd.).

LSet() in RSet() - napolnite eno spremenljivko s simboli druge, ne da bi spremenili njeno dolžino (levo in desno). Dodatni znaki so odrezani in presledki so nadomeščeni z manjkajočimi znaki.

LTrim() , RTrim() , Trim() - odstranite presledke z leve, desne ali obeh levo in desno.

Replace() - zamenja eno zaporedje znakov z drugim v nizu.

Space() in String() - vrne niz s številom presledkov ali znakov, ki jih določite. Običajno se uporablja za oblikovanje

Funkcija-postopek je posebna vrsta postopka VBA, ki vrne rezultat. Uporabniško definirane procedure, kot so vgrajene funkcije VBA, imajo lahko neobvezne in poimenovane argumente. Snemalnika makrov ne morete uporabiti za snemanje funkcije postopka, lahko pa uredite makro, ki ga je posnel snemalnik, in ga spremenite v funkcijo postopka.

Glavna razlika med funkcijo procedure in drugimi procedurami je poleg dejstva, da funkcije vrnejo vrednost, procedure pa ne, ta, da funkcija procedure uporablja ključne besede funkcija in Končna funkcija.

Sintaksa:

Ime funkcije ()
"Izjave VBA
Končna funkcija

Funkcija je ključna beseda, ki označuje začetek funkcije.

Ime - ime funkcije. Imena funkcij sledijo istim pravilom kot druga imena identifikatorjev VBA.

Arglist - seznam argumentov za to funkcijo, izbirni element.

Vrsta – katera koli vrsta vrnjene vrednosti funkcije. Če je tip nedefiniran, je rezultat, ki ga vrne funkcija procedure, tipa Variant.

Ime = izraz je dodelitev funkcije, ki VBA pove, katero vrednost naj funkcija vrne, izbirni element. Vendar morate v funkcije postopka vedno vključiti operator dodelitve.

Končna funkcija – ključne besede, ki končajo funkcijo.


Tudi če funkcija nima argumentov (na primer Zdaj, Datum), morate v deklaraciji funkcije uporabiti oklepaje.

Običajno je funkcija zasnovana za izvedbo izračuna in vrnitev rezultata. Ko deklarirate funkcijo procedure, podate ime vsakega argumenta, posredovanega funkciji. Imena argumentov na seznamu so ločena z vejico in morajo upoštevati pravila, ki veljajo za kateri koli identifikator VBA.


Spodaj je seznam uporabe funkcije preproste procedure, ki odstrani presledke na začetku in na koncu ter prešteje število znakov v izrazu.



Brez uporabe funkcije bi bil seznam videti takole:



Iz tega preprostega primera mislim, da je glavna ideja uporabe funkcij postopka jasna - izboljšanje berljivosti programske kode in njeno zmanjšanje (z drugimi besedami, funkcija postopka je napisana, ko se isti "kos" kode pojavi več kot 2 -3-krat v programski kodi). Dejansko, če naša proceduralna funkcija ni sestavljena iz ene vrstice, ampak, recimo, 10 vrstic; in programska koda bi to funkcijo postopka uporabila 5-krat, potem bi bil celoten seznam programov 38 vrstic krajši.


Kot smo že omenili, VBA posreduje vse argumente funkcijski proceduri kot tipe Variant. Za vsak argument na seznamu argumentov lahko deklarirate posebne vrste podatkov.

Preden začnete ustvarjati lastne funkcije VBA, je koristno vedeti, da ima Excel VBA veliko zbirko vnaprej izdelanih vgrajenih funkcij, ki jih lahko uporabite pri pisanju kode.

Seznam teh funkcij si lahko ogledate v urejevalniku VBA:

  • Odprite Excelov delovni zvezek in zaženite urejevalnik VBA (kliknite tukaj Alt+F11), in nato kliknite F2.
  • Na spustnem seznamu v zgornjem levem kotu zaslona izberite knjižnico VBA.
  • Prikaže se seznam vgrajenih razredov in funkcij VBA. Kliknite na ime funkcije, da prikažete kratek opis na dnu okna. Stiskanje F1 bo odprl stran spletne pomoči za to funkcijo.

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

Funkcija po meri in podpostopki v VBA

V programu Excel Visual Basic je nabor ukazov, ki izvajajo določeno nalogo, postavljen v proceduro funkcija(Funkcija) oz Sub(Podrutina). Glavna razlika med postopki funkcija in Sub je to postopek funkcija vrne rezultat, postopek Sub- 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 Sub.

Argumenti

Različne podatke je mogoče posredovati proceduram VBA z uporabo argumentov. Seznam argumentov je določen, ko je postopek deklariran. Na primer postopek Sub v VBA doda določeno 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

Zavedajte se, da imate argumente za postopke funkcija in Sub 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, če želite, da je celoštevilski argument za funkcijo izbiren, bi ga deklarirali takole:

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

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

V proceduri je lahko več neobveznih argumentov; vsi so 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 ta zapusti.
  • avtor Ref– posredovanje argumenta s sklicevanjem. To pomeni, da se postopku posreduje dejanski naslov argumenta v pomnilniku. Vse spremembe argumenta znotraj postopka bodo shranjene, ko se postopek zapre.

Uporaba ključnih besed ByVal oz avtor Ref V deklaraciji procedure lahko natančno določite, kako se argument posreduje proceduri. To je prikazano spodaj s primeri:

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

Preden nadaljujete z učenjem postopkov funkcija in Sub Bolj podrobno bo koristno še enkrat pogledati značilnosti in razlike med tema dvema vrstama postopkov. Sledi kratka razprava o postopkih VBA funkcija in Sub in prikazani so preprosti primeri.

Postopek VBA "Funkcija"

Urejevalnik VBA prepozna postopek funkcija

Funkcija...Končna funkcija

Kot smo že omenili, postopek funkcija v VBA (v nasprotju z Sub), 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 odlično prikazano v naslednjem primeru.

Primer postopka VBA “Funkcija”: Izvedba matematične operacije s 3 številkami

Spodaj je primer kode postopka VBA funkcija, ki sprejme tri argumente tipa Dvojno(števila s plavajočo vejico dvojne natančnosti). Posledično postopek vrne drugo številko tega tipa Dvojno, enako 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

To je 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 Dvojno(besede pravijo to Kot dvojnik po seznamu argumentov). Ta primer tudi prikazuje, kako je rezultat postopka funkcija je shranjen v spremenljivki z enakim imenom kot ime procedure.

Klicanje postopka VBA "Funkcija"

Če preprost postopek, opisan zgoraj 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.

Klicanje procedure 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

Klicanje postopka 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 funkcijaSumMinus lahko pokličete tako, da v celico delovnega lista vnesete naslednji izraz:

VsotaMinus(10, 5, 2)

Postopek VBA "Sub"

Urejevalnik VBA razume, da je pred njim postopek Sub, ko 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

Oglejmo si primer preprostega postopka VBA Sub, katerega naloga je spremeniti oblikovanje izbranega obsega celic. Celice so nastavljene na sredinsko poravnavo (navpično in 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 Sub izvaja dejanja, vendar ne vrača rezultatov.

Ta primer uporablja tudi izbirni argument iFontSize. Če argument iFontSize ni prešel v postopek Sub, potem je njegova privzeta vrednost 10. Vendar, če argument iFontSize prešel v proceduro Sub, potem bo velikost pisave, ki jo določi uporabnik, nastavljena v izbranem obsegu celic.

Postopek VBA »Sub«: Primer 2. Poravnava na sredino in uporaba krepke pisave v izbranem obsegu celic

Naslednji postopek je podoben tistemu, ki smo ga pravkar obravnavali, vendar tokrat namesto spreminjanja velikosti uporabi krepko pisavo za izbrani obseg celic. To je primer postopka Sub, ki mu niso posredovani argumenti:

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

Klicanje postopka "Sub" v Excelu VBA

Klicanje procedure VBA "Sub" iz druge procedure

Za klic postopka VBA Sub iz drugega postopka VBA, morate zapisati ključno besedo Pokliči, ime postopka Sub nato pa v oklepajih argumente 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

Klicanje postopka VBA "Sub" z delovnega lista

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

Tukaj je preprost način za zagon (ali izvedbo) postopka Sub, na voljo na delovnem listu:

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

Za izvedbo postopka Sub hitro in enostavno mu lahko dodelite kombinacijo tipk. Za to:

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

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

Obseg postopka VBA

Drugi del te vadnice je obravnaval temo obsega spremenljivk in konstant ter vlogo ključnih besed Javno in Zasebno. Te ključne besede je mogoče uporabiti tudi v povezavi s postopki VBA:

Ne pozabite, da če pred razglasitvijo postopka VBA funkcija oz Sub ključna beseda ni vstavljena, potem je nastavljena privzeta lastnost za postopek Javno(to pomeni, da bo na voljo povsod v danem projektu VBA). To se razlikuje od deklariranja spremenljivk, ki so privzeto Zasebno.

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

Če morate prekiniti izvajanje postopka VBA funkcija oz Sub, ne da bi čakali na njegov naravni konec, potem obstajajo operaterji za to Izhod iz funkcije in Izhod Sub. Uporaba teh operaterjev je prikazana spodaj z enostavnim primerom postopka funkcija, ki pričakuje, da bo dobil pozitiven argument za izvedbo nadaljnjih operacij. Če je v proceduro posredovana nepozitivna vrednost, potem ni mogoče izvesti nobenih nadaljnjih operacij, zato mora biti uporabniku prikazano sporočilo o napaki in procedura se mora takoj končati:

Funkcija VAT_Amount(sVAT_Rate As Single) Kot posamezen DDV_Amount = 0 Če je sVAT_Rate<= 0 Then MsgBox "Expected a Positive value of sVAT_Rate but Received " & sVAT_Rate Exit Function End If ... End Function

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

Pri pisanju kode VBA v Excelu se na vsakem koraku uporablja niz vgrajenih operatorjev. Te operatorje delimo na matematične, nizovne, primerjalne in logične. Nato si bomo podrobneje ogledali vsako skupino operaterjev.

Matematični operatorji

Osnovni matematični operatorji VBA so navedeni v spodnji tabeli.

Desni stolpec tabele prikazuje privzeto prednost operatorja brez oklepajev. Če izrazu dodate oklepaje, lahko po želji spremenite vrstni red izvajanja stavkov VBA.

Operatorji nizov

Glavni operator nizov v Excelu VBA je operator veriženja & (združi):

Operatorji primerjave

Operatorji primerjave se uporabljajo za primerjavo dveh števil ali nizov in vrnitev logične vrednosti, kot je Boolean(Pravilno ali napačno). Glavni primerjalni operatorji Excel VBA so navedeni v tej tabeli:

Logični operatorji

Logični operatorji, tako kot primerjalni operatorji, vrnejo logično vrednost tipa Boolean(Pravilno ali napačno). Osnovni logični operatorji Excel VBA so navedeni v spodnji tabeli:

Zgornja tabela ne navaja vseh logičnih operatorjev, ki so na voljo v VBA. Celoten seznam logičnih operatorjev je na voljo v središču za razvijalce Visual Basic.

Vgrajene funkcije

V VBA je na voljo veliko vgrajenih funkcij, ki jih je mogoče uporabiti pri pisanju kode. Spodaj je nekaj najpogosteje uporabljenih:

funkcija Akcija
Abs Vrne absolutno vrednost danega števila.
  • Trebušnjaki (-20) vrne vrednost 20;
  • Trebušnjaki (20) vrne vrednost 20.
Chr Vrne znak ANSI, ki ustreza številski vrednosti parametra.
  • Chr (10) vrne prelom vrstice;
  • Chr (97) vrne znak a.
Datum Vrne trenutni sistemski datum.
DateAdd Danemu datumu doda določen časovni interval. Sintaksa funkcije:

DateAdd( interval , število , datum )

Kje je argument interval definira vrsto časovnega intervala, dodanega danemu datum v znesku, navedenem v argumentu število .

Prepir interval lahko sprejme eno od naslednjih vrednosti:

  • DateAdd("d", 32, "01/01/2015") doda 32 dni datumu 01/01/2015 in tako vrne datum 02/02/2015.
  • DateAdd("ww", 36, "01/01/2015") doda 36 tednov datumu 01/01/2015 in vrne datum 09/09/2015.
DateDiff Izračuna število določenih časovnih intervalov med dvema podanima datumoma.
  • DateDiff("d", "01/01/2015", "02/02/2015") izračuna število dni med datumoma 1. 1. 2015 in 2. 2. 2015 ter vrne rezultat 32.
  • DateDiff("ww", "01/01/2015", "03/03/2016") izračuna število tednov med datumoma 1. 1. 2015 in 3. 3. 2016 ter vrne rezultat 61.
Dan Vrne celo število, ki ustreza dnevu v mesecu podanega datuma.

primer: Dan ("29. 1. 2015") vrne številko 29.

ura Vrne celo število, ki ustreza številu ur v danem času.

primer: Ura ("22:45:00") vrne številko 22.

InStr Kot argument vzame celo število in dva niza. Vrne položaj pojavitve drugega niza v prvem, pri čemer se iskanje začne na položaju, ki ga določa celo število.
  • InStr(1, “Tukaj je beseda, ki jo iščete”, “beseda”) vrne številko 13.
  • InStr(14, “Tukaj je iskalna beseda in tukaj je druga iskalna beseda”, “beseda”) vrne številko 38.

Opomba: Argument števila morda ni določen, v tem primeru se iskanje začne od prvega znaka niza, podanega v drugem argumentu funkcije.

Int Vrne celoštevilski del danega števila.

primer: Int (5,79) vrne rezultat 5.

Isdate Vračila Pravče je podana vrednost datum, oz False– če ni zmenek.
  • IsDate("01/01/2015") vrača Prav;
  • IsDatum (100) vrača False.
IsError Vračila Prav, če je podana vrednost napaka, oz False– če ni napaka.
Manjka Ime neobveznega argumenta procedure se posreduje kot argument funkciji. Manjka vrača Prav, če ni podana vrednost za zadevni argument procedure.
IsNumeric Vračila Pravče je dano vrednost mogoče obravnavati kot število, sicer vrne False.
levo Vrne določeno število znakov od začetka posredovanega niza. Sintaksa funkcije je naslednja:

levo( linija , dolžina )

Kje linija je izvirni niz in dolžina– število vrnjenih znakov, šteto od začetka vrstice.

  • Levo ("abvgdezziklmn", 4) vrne niz “abvg”;
  • Levo ("abvgdezziklmn", 1) vrne niz "a".
Len Vrne število znakov v nizu.

primer: Len ("abvgdez") vrne številko 7.

mesec Vrne celo število, ki ustreza mesecu podanega datuma.

primer: Mesec ("29. 1. 2015") vrne vrednost 1.

sredina Vrne določeno število znakov iz sredine posredovanega niza. Sintaksa funkcije:

Sredina ( linija , Začetek , dolžina )

Kje linija je izvirni niz Začetek– položaj začetka ekstrahiranega niza, dolžina– število znakov, ki jih je treba ekstrahirati.

  • Sredina ("abvgdezziklmn", 4, 5) vrne niz "kje";
  • Sredina ("abvgdezziklmn", 10, 2) vrne niz “cl”.
minuta Vrne celo število, ki ustreza številu minut v določenem času. Primer: Minuta ("22:45:15") vrne vrednost 45.
zdaj Vrne trenutni sistemski datum in uro.
Prav Vrne določeno število znakov od konca posredovanega niza. Sintaksa funkcije:

Prav( linija , dolžina )

Kje linija je izvirni niz in dolžina– to je število znakov, ki jih je treba ekstrahirati, šteto od konca danega niza.

  • Desno (“abvgdezziklmn”, 4) vrne niz “clmn”;
  • Desno (“abvgdezziklmn”, 1) vrne niz "n".
drugič Vrne celo število, ki ustreza številu sekund v danem času.

primer: Drugi ("22:45:15") vrne vrednost 15.

Sqr Vrne kvadratni koren številske vrednosti, posredovane kot argument.
  • Sqr (4) vrne vrednost 2;
  • Sqr (16) vrne vrednost 4.
Čas Vrne trenutni sistemski čas.
Ubound Vrne zgornji indeks dimenzije navedene matrike.

Opomba: Pri večdimenzionalnih nizih lahko izbirni argument poda indeks, katere dimenzije je treba vrniti. Če ni navedeno, je privzeto 1.