“Funkciju” un “apakšpunktu” procedūras VBA

Iebūvētas VBA funkcijas

Pirms sākat izveidot savas VBA funkcijas, ir labi zināt, ka programmā Excel VBA ir bagātīga iepriekš iebūvētu funkciju kolekcija, ko varat izmantot, rakstot kodu.

Šo funkciju sarakstu var skatīt VBA redaktorā:

  • Atveriet Excel darbgrāmatu un palaidiet VBA redaktoru (noklikšķiniet, lai to izdarītu Alt+F11) un pēc tam nospiediet F2.
  • Ekrāna augšējā kreisajā stūrī esošajā nolaižamajā sarakstā atlasiet bibliotēku VBA.
  • Tiks parādīts iebūvēto VBA klašu un funkciju saraksts. Noklikšķiniet uz funkcijas nosaukuma, lai loga apakšā parādītu tās īsu aprakstu. spiešana F1 tiks atvērta šīs funkcijas tiešsaistes palīdzības lapa.

Turklāt pilnu iebūvēto VBA funkciju sarakstu ar piemēriem var atrast Visual Basic izstrādātāju centrā.

Pielāgotas procedūras “Funkcija” un “Apakšpunkts” VBA

Programmā Excel Visual Basic procedūrā tiek ievietota komandu kopa, kas veic noteiktu uzdevumu. funkcija (Funkcija) vai Saskaņā ar (Apakšprogramma). Galvenā atšķirība starp procedūrām funkcija и Saskaņā ar vai tā ir procedūra funkcija atgriež rezultātu, procedūru Saskaņā ar – nē.

Tāpēc, ja nepieciešams veikt darbības un iegūt kādu rezultātu (piemēram, summēt vairākus skaitļus), tad parasti tiek izmantota procedūra funkcija, un lai vienkārši veiktu dažas darbības (piemēram, mainītu šūnu grupas formatējumu), jums ir jāizvēlas procedūra Saskaņā ar.

Argumenti

Izmantojot argumentus, VBA procedūrām var nodot dažādus datus. Argumentu saraksts tiek norādīts, deklarējot procedūru. Piemēram, procedūra Saskaņā ar VBA pievieno doto veselo skaitli (Integer) katrai šūnai atlasītajā diapazonā. Šo numuru var nodot procedūrai, izmantojot šādu argumentu:

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

Paturiet prātā, ka jums ir argumenti par procedūrām funkcija и Saskaņā ar VBA ir neobligāts. Dažām procedūrām nav nepieciešami argumenti.

Izvēles argumenti

VBA procedūrām var būt neobligāti argumenti. Šie ir argumenti, kurus lietotājs var norādīt, ja vēlas, un, ja tie tiek izlaisti, procedūra tiem izmanto noklusējuma vērtības.

Atgriežoties pie iepriekšējā piemēra, lai vesela skaitļa arguments funkcijai būtu neobligāts, tas tiktu deklarēts šādi:

Sub AddToCells (neobligāti i kā vesels skaitlis = 0)

Šajā gadījumā vesela skaitļa arguments i noklusējuma vērtība būs 0.

Procedūrā var būt vairāki neobligāti argumenti, un tie visi ir norādīti argumentu saraksta beigās.

Argumentu nodošana pēc vērtības un atsauces

Argumentus VBA var nodot procedūrai divos veidos:

  • Autors Val – argumenta nodošana pēc vērtības. Tas nozīmē, ka procedūrai tiek nodota tikai vērtība (tas ir, argumenta kopija), un tāpēc visas procedūrā veiktās argumentā veiktās izmaiņas tiks zaudētas, kad procedūra tiks izbeigta.
  • ByRef – argumenta nodošana ar atsauci. Tas nozīmē, ka faktiskā argumenta atrašanās vietas adrese atmiņā tiek nodota procedūrai. Visas izmaiņas, kas procedūrā veiktas argumentā, tiks saglabātas, kad procedūra tiks izbeigta.

Atslēgvārdu izmantošana Autors Val or ByRef procedūras deklarācijā varat norādīt, kā arguments tiek nodots procedūrai. Tas ir parādīts piemēros zemāk:

Sub AddToCells(ByVal i As Integer) ... Beigas Sub
Šajā gadījumā vesela skaitļa arguments i pagājis pēc vērtības. Pēc procedūras atstāšanas Saskaņā ar viss izgatavots ar i izmaiņas tiks zaudētas.
Sub AddToCells(ByRef i As Integer) ... Beigas Sub
Šajā gadījumā vesela skaitļa arguments i nodots ar atsauci. Pēc procedūras atstāšanas Saskaņā ar viss izgatavots ar i izmaiņas tiks saglabātas mainīgajā, kas tika nodots procedūrai Saskaņā ar.

Atcerieties, ka VBA argumenti pēc noklusējuma tiek nodoti pēc atsauces. Citiem vārdiem sakot, ja netiek izmantoti atslēgvārdi Autors Val or ByRef, tad arguments tiks nodots ar atsauci.

Pirms procedūru turpināšanas funkcija и Saskaņā ar sīkāk, būs lietderīgi vēlreiz apskatīt šo divu veidu procedūru iezīmes un atšķirības. Tālāk ir sniegtas īsas diskusijas par VBA procedūrām funkcija и Saskaņā ar un tiek parādīti vienkārši piemēri.

VBA procedūra "Funkcija"

VBA redaktors atpazīst procedūru funkcijakad tas saskaras ar komandu grupu, kas atrodas starp šādiem sākuma un beigu paziņojumiem:

Funkcija ... Beigu funkcija

Kā minēts iepriekš, procedūra funkcija VBA (pretēji Saskaņā ar) atgriež vērtību. Uz atgriežamajām vērtībām attiecas šādi noteikumi:

  • Procedūras galvenē ir jānorāda atgriešanas vērtības datu tips funkcija.
  • Mainīgajam, kas satur atgriešanas vērtību, ir jābūt tādam pašam nosaukumam kā procedūrai funkcija. Šis mainīgais nav atsevišķi jādeklarē, jo tas vienmēr pastāv kā procedūras neatņemama sastāvdaļa. funkcija.

Tas ir labi ilustrēts nākamajā piemērā.

VBA funkcijas piemērs: matemātiskas darbības veikšana ar 3 skaitļiem

Tālāk ir sniegts VBA procedūras koda piemērs funkcija, kurā ir trīs veida argumenti Dubultosies (dubultās precizitātes peldošā komata skaitļi). Rezultātā procedūra atgriež citu veida numuru Dubultosiesvienāds ar pirmo divu argumentu summu mīnus trešais arguments:

Funkcija SumMinus(dNum1 kā dubultā, dNum2 kā dubultā, dNum3 kā dubultā) kā dubultā summaMinus = dNum1 + dNum2 - dNum3 beigu funkcija

Šī ļoti vienkāršā VBA procedūra funkcija ilustrē, kā dati tiek nodoti procedūrai, izmantojot argumentus. Var redzēt, ka procedūras atgrieztais datu tips ir definēts kā Dubultosies (vārdi saka Kā Double aiz argumentu saraksta). Šis piemērs parāda arī procedūras rezultātu funkcija tiek saglabāts mainīgajā ar tādu pašu nosaukumu kā procedūras nosaukumam.

VBA procedūras izsaukšana “Funkcija”

Ja iepriekš minētā vienkāršā procedūra funkcija ievietots Visual Basic redaktora modulī, to var izsaukt no citām VBA procedūrām vai izmantot darblapā Excel darbgrāmatā.

Izsauciet VBA procedūru “Funkcija” no citas procedūras

Procedūra funkcija var izsaukt no citas VBA procedūras, vienkārši piešķirot šo procedūru mainīgajam. Nākamajā piemērā parādīts procedūras izsaukums Summinus, kas tika definēts iepriekš.

Apakšgalvenais() Dim kopā kā Dubultā summa = SumMinus(5, 4, 3) End Sub

Izsauciet VBA procedūru “Funkcija” no darblapas

VBA procedūra funkcija var izsaukt no Excel darblapas tāpat kā jebkuru citu iebūvēto Excel funkciju. Tāpēc iepriekšējā piemērā izveidotā procedūra funkcija - Summinus var izsaukt, darblapas šūnā ievadot šādu izteiksmi:

=SumMinus(10, 5, 2)

VBA procedūra "Sub"

VBA redaktors saprot, ka priekšā ir procedūra Saskaņā arkad tas saskaras ar komandu grupu, kas atrodas starp šādiem sākuma un beigu paziņojumiem:

Apakš... Beigt apakš

VBA procedūra “Sub”: 1. piemērs. Izlīdzinājuma centrā un fonta lieluma maiņa atlasītajā šūnu diapazonā

Apsveriet vienkāršas VBA procedūras piemēru Saskaņā ar, kuras uzdevums ir mainīt atlasītā šūnu diapazona formatējumu. Šūnas ir centrētas (gan vertikāli, gan horizontāli), un fonta lielums tiek mainīts uz lietotāja norādīto:

Apakšformāts_centrēts_un_izmērs(Izvēles iFontSize kā vesels skaitlis = 10) Selection.Horizontal Alignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize Beigu apakšpunkts

Šī procedūra Saskaņā ar veic darbības, bet neatgriež rezultātu.

Šajā piemērā tiek izmantots arī neobligāts arguments Fonta izmērs. Ja arguments Fonta izmērs nav nodots procedūrai Saskaņā ar, tad tā noklusējuma vērtība ir 10. Tomēr, ja arguments Fonta izmērs nodota procedūrai Saskaņā ar, tad atlasītajam šūnu diapazonam tiks iestatīts lietotāja norādītais fonta lielums.

VBA apakšprocedūra: 2. piemērs: līdzināšana centrā un treknraksts atlasītajā šūnu diapazonā

Šī procedūra ir līdzīga tikko apspriestajai, taču šoreiz tā vietā, lai mainītu izmērus, atlasītajam šūnu diapazonam tiek izmantots treknraksts. Šis ir procedūras piemērs Saskaņā ar, kas neprasa argumentus:

Apakšformāts_centrēts_un_trekns() Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Bold = True End Sub

“Apakš” procedūras izsaukšana programmā Excel VBA

Izsauciet VBA procedūru “Sub” no citas procedūras

Lai izsauktu VBA procedūru Saskaņā ar no citas VBA procedūras, jums jāieraksta atslēgvārds izsaukums, procedūras nosaukums Saskaņā ar un tālāk iekavās ir procedūras argumenti. Tas ir parādīts zemāk esošajā piemērā:

Sub main() Call Format_Centered_Un_Sized(20) End Sub

Ja procedūra Formāts_centrēts_un_izmērs ir vairāk nekā viens arguments, tie ir jāatdala ar komatiem. Kā šis:

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

Izsauciet VBA procedūru “Sub” no darblapas

Procedūra Saskaņā ar nevar ievadīt tieši Excel lapas šūnā, kā to var izdarīt ar procedūru funkcijajo procedūra Saskaņā ar neatgriež vērtību. Tomēr procedūras Saskaņā ar, kuriem nav argumentu un kas tiek deklarēti kā valsts (kā parādīts zemāk) būs pieejams darblapas lietotājiem. Tādējādi, ja vienkāršās procedūras tika apspriestas iepriekš Saskaņā ar ievietota Visual Basic redaktora modulī, procedūra Format_Centred_Un_Bold būs pieejams lietošanai Excel darblapā, un procedūru Formāts_centrēts_un_izmērs – nebūs pieejams, jo tam ir argumenti.

Šeit ir vienkāršs veids, kā palaist (vai izpildīt) procedūru Saskaņā ar, kas pieejams no darblapas:

  • prese Alt+F8 (nospiediet taustiņu cits un, turot to nospiestu, nospiediet taustiņu F8).
  • Parādītajā makro sarakstā atlasiet to, kuru vēlaties palaist.
  • prese skrējiens (skriet)

Lai veiktu procedūru Saskaņā ar ātri un vienkārši varat tam piešķirt īsinājumtaustiņus. Priekš šī:

  • prese Alt+F8.
  • Parādītajā makro sarakstā atlasiet to, kuram vēlaties piešķirt īsinājumtaustiņu.
  • prese parametri (Opcijas) un parādītajā dialoglodziņā ievadiet īsinājumtaustiņu.
  • prese OK un aizveriet dialoglodziņu Makro (Makro).

uzmanību: Piešķirot makro īsinājumtaustiņus, pārliecinieties, ka programmā Excel tas netiek izmantots kā standarts (piemēram, Ctrl + C). Ja atlasīsit jau esošu īsinājumtaustiņu, tas tiks atkārtoti piešķirts makro, un rezultātā lietotājs var nejauši palaist makro.

VBA procedūras joma

Šīs apmācības 2. daļā tika apspriests mainīgo un konstantu apjoms un atslēgvārdu loma. valsts и Privāts. Šos atslēgvārdus var izmantot arī ar VBA procedūrām:

Publiskās apakšgrupas AddToCells(i kā vesels skaitlis) ... Beigas sub
Ja pirms procedūras deklarācijas ir atslēgvārds valsts, tad procedūra būs pieejama visiem šī VBA projekta moduļiem.
Privātas apakšgrupas AddToCells(i kā vesels skaitlis) ... Beigt sub
Ja pirms procedūras deklarācijas ir atslēgvārds Privāts, tad šī procedūra būs pieejama tikai pašreizējam modulim. To nevar izsaukt nevienā citā modulī vai no Excel darbgrāmatas.

Atcerieties, ka, ja pirms VBA procedūras deklarēšanas funkcija or Saskaņā ar atslēgvārds nav ievietots, procedūrai ir iestatīts noklusējuma rekvizīts valsts (tas ir, tas būs pieejams visur šajā VBA projektā). Tas ir pretstatā mainīgo deklarācijām, kuras pēc noklusējuma ir Privāts.

Agrīna iziešana no VBA procedūrām “Funkcija” un “Sub”

Ja nepieciešams pārtraukt VBA procedūras izpildi funkcija or Saskaņā ar, negaidot tā dabisko beigas, tad šim ir operatori Izejas funkcija и Iziet no apakš. Šo operatoru izmantošana ir parādīta zemāk, izmantojot vienkāršu procedūru kā piemēru. funkcijaA, kas sagaida pozitīvu argumentu turpmāko darbību veikšanai. Ja procedūrai tiek nodota nepozitīva vērtība, turpmākas darbības nevar veikt, tāpēc lietotājam jāparāda kļūdas ziņojums un procedūra nekavējoties jāiziet:

Funkcija VAT_Amount(sVAT_Rate As Single) As Single VAT_Amount = 0 If sVAT_Rate <= 0 then MsgBox "Sagaidīja pozitīvu sVAT_Rate vērtību, bet saņemta" & sVAT_Rate Izejas funkcija Beigt, ja... Beigt funkciju

Lūdzu, ņemiet vērā, ka pirms procedūras pabeigšanas funkcija - PVN_Summa, kodā tiek ievietota iebūvēta VBA funkcija MsgBox, kurā lietotājam tiek parādīts brīdinājuma uznirstošais logs.

Atstāj atbildi