"Funtzioa" eta "Azpi" prozedurak VBAn

VBA funtzio integratuak

Zure VBA funtzioak sortzen hasi aurretik, ona da jakitea Excel VBA-k zure kodea idazten duzun bitartean erabil ditzakezun aurrez eraikitako funtzioen bilduma aberatsa duela.

Funtzio hauen zerrenda VBA editorean ikus daiteke:

  • Ireki Excel lan-liburu bat eta abiarazi VBA editorea (egin klik hau egiteko Alt + F11) eta, ondoren, sakatu F2.
  • Hautatu liburutegi bat pantailaren goiko ezkerreko goitibeherako zerrendatik VBA.
  • VBA barneko klase eta funtzioen zerrenda agertuko da. Egin klik funtzioaren izenaren gainean bere deskribapen laburra leihoaren behealdean bistaratzeko. sakatuz F1 funtzio horren lineako laguntza orria irekiko du.

Horrez gain, VBA integratutako funtzioen zerrenda osoa adibideekin aurki daiteke Visual Basic Developer Center-en.

Prozedura pertsonalizatuak "Funtzioa" eta "Sub" VBAn

Excel Visual Basic-en, zeregin zehatz bat egiten duten komando multzoa prozedura batean jartzen da. Funtzio (Funtzioa) edo Sub (azpirutina). Prozeduren arteko desberdintasun nagusia Funtzio и Sub hori da prozedura Funtzio emaitza itzultzen du, prozedura Sub – ez.

Hori dela eta, ekintzak egin eta emaitzaren bat lortu behar baduzu (adibidez, hainbat zenbaki batu), orduan prozedura erabili ohi da. Funtzio, eta ekintza batzuk besterik ez egiteko (adibidez, gelaxka-talde baten formatua aldatzea), prozedura hautatu behar duzu Sub.

Argumentuak

Hainbat datu pasa daitezke VBA prozeduretara argumentuak erabiliz. Argumentu-zerrenda prozedura bat deklaratzean zehazten da. Adibidez, prozedura Sub VBA-n emandako zenbaki osoa (Integer) gehitzen du hautatutako barrutiko gelaxka bakoitzari. Zenbaki hau prozedurara pasa diezaiokezu argumentu bat erabiliz, honela:

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

Kontuan izan prozeduretarako argudioak edukitzea Funtzio и Sub VBAn aukerakoa da. Prozedura batzuek ez dute argumenturik behar.

Aukerako Argudioak

VBA prozedurek aukerako argumentuak izan ditzakete. Erabiltzaileak nahi badu zehaztu ditzakeen argumentuak dira, eta baztertzen badira, prozedurak balio lehenetsiak erabiltzen ditu.

Aurreko adibidera itzuliz, funtzio bati osoko argumentua aukerakoa izateko, honela deklaratuko litzateke:

Azpi GehituGelulak (Aukerakoa i Integer = 0)

Kasu honetan, osoko argumentua i lehenetsia 0 izango da.

Prozedura batean aukerako hainbat argumentu egon daitezke, guztiak argumentu-zerrendaren amaieran zerrendatuta.

Argumentuak balioaren eta erreferentziaren arabera pasatzea

VBAn argudioak prozedura batera pasa daitezke bi modutan:

  • ByVal – argumentu bat balioaren arabera pasatzea. Horrek esan nahi du balioa (hau da, argumentuaren kopia bat) soilik pasatzen zaiola prozedurari, eta, beraz, prozeduraren barruan argumentuari egindako aldaketak galdu egingo dira prozedura irteten denean.
  • Erref – Argumentu bat erreferentziaz pasatzea. Hau da, memorian argumentu-kokapenaren benetako helbidea prozedurara pasatzen da. Prozeduraren barruan argumentu batean egindako aldaketak prozedura amaitzean gordeko dira.

Gako-hitzak erabiliz ByVal or Erref prozeduraren deklarazioan, argumentua prozedurara nola pasatzen den zehaztu dezakezu. Hau beheko adibideetan erakusten da:

Azpi AddToCells(ByVal i Integer gisa) ... End Sub
Kasu honetan, osoko argumentua i balioz pasatu. Prozedura utzi ondoren Sub guztiarekin egina i aldaketak galduko dira.
Sub AddToCells(ByRef i Integer As) ... End Sub
Kasu honetan, osoko argumentua i erreferentziaz gaindituta. Prozedura utzi ondoren Sub guztiarekin egina i aldaketak prozedurara pasatu den aldagaian gordeko dira Sub.

Gogoratu VBA-n argumentuak erreferentziaz pasatzen direla lehenespenez. Beste era batera esanda, gako-hitzak erabiltzen ez badira ByVal or Erref, orduan argumentua erreferentziaz pasatuko da.

Prozedurei ekin aurretik Funtzio и Sub zehatzago, baliagarria izango da bi prozedura mota hauen ezaugarri eta desberdintasunei beste begirada bat ematea. Jarraian, VBA prozeduren inguruko eztabaida laburrak dira Funtzio и Sub eta adibide errazak erakusten dira.

VBA prozedura «Funtzioa»

VBA editoreak prozedura ezagutzen du FuntzioHasierako eta ixteko adierazpen hauen artean sartutako komando talde batekin topo egiten duenean:

Funtzioa ... Amaiera Funtzioa

Lehen esan bezala, prozedura Funtzio VBAn (en aurka Sub) balio bat ematen du. Itzultzeko balioei arau hauek aplikatzen zaizkie:

  • Itzultzeko balioaren datu-mota prozeduraren goiburuan adierazi behar da Funtzio.
  • Itzultzeko balioa duen aldagaiak prozeduraren izen bera izan behar du Funtzio. Aldagai hau ez da bereizita deklaratu behar, beti baitago prozeduraren osagai gisa. Funtzio.

Hau ondo ilustratzen da ondoko adibidean.

VBA Funtzioa Adibidea: 3 Zenbakien Eragiketa Matematika bat egitea

Jarraian, VBA prozedura-kode baten adibidea da Funtzio, motako hiru argumentu hartzen dituena Bikoitza (zehaztasun bikoitzeko koma mugikorreko zenbakiak). Ondorioz, prozedurak beste mota bat itzultzen du Bikoitzalehen bi argumentuen baturaren berdina hirugarren argumentua ken:

Funtzioa SumMinus(dNum1 Bikoitza gisa, dNum2 Bikoitza, dNum3 Bikoitza) Bikoitza SumMinus = dNum1 + dNum2 - dNum3 Amaiera funtzioa

VBA prozedura oso sinple hau Funtzio argumentuen bidez datuak prozedura batera nola pasatzen diren erakusten du. Prozedurak itzultzen duen datu mota honela definitu dela ikus dezakezu Bikoitza (esaten dute hitzek Bikoitza gisa argudioen zerrendaren ondoren). Adibide honek prozeduraren emaitza nolakoa den ere erakusten du Funtzio prozeduraren izenaren izen bereko aldagai batean gordetzen da.

VBA prozedurari "Funtzioa" deitzea

Aurreko prozedura sinplea bada Funtzio Visual Basic editoreko modulu batean txertatuta, beste VBA prozeduretatik deitu daiteke edo Excel lan-liburuko lan-orri batean erabil daiteke.

Deitu VBA prozedura "Funtzioa" beste prozedura batetik

Prozedura Funtzio beste VBA prozedura batetik deitu daiteke prozedura hori aldagai bati esleituz. Hurrengo adibidean prozedura baterako deia erakusten da Summinus, goian definitu zena.

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

Deitu VBA prozedura "Funtzioa" lan-orri batetik

VBA prozedura Funtzio Excel lan-orri batetik dei daiteke beste edozein Excel-eko funtzioaren modu berean. Beraz, aurreko adibidean sortutako prozedura Funtzio - Summinus dei egin daiteke lan-orriaren gelaxka batean adierazpen hau sartuz:

=SumMinus(10, 5, 2)

VBA prozedura «Sub»

VBA editoreak bere aurrean prozedura bat dagoela ulertzen du SubHasierako eta ixteko adierazpen hauen artean sartutako komando talde batekin topo egiten duenean:

Sub ... End Sub

VBA prozedura "Sub": 1. adibidea. Zentralaren lerrokatzea eta letra-tamaina aldatzea hautatutako gelaxka-barruti batean

Demagun VBA prozedura sinple baten adibide bat Sub, zeinaren zeregina hautatutako gelaxken barrutiaren formatua aldatzea da. Gelaxkak zentratuta daude (bertikalean zein horizontalean) eta letra-tipoaren tamaina erabiltzaileak zehaztutakoaren arabera aldatzen da:

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

Prozedura hau Sub ekintzak egiten ditu baina ez du emaitzarik itzultzen.

Adibide honek Aukerako argumentua ere erabiltzen du Letra-tamaina. Argudioa bada Letra-tamaina ez da prozedurara pasatu Sub, orduan bere balio lehenetsia 10 da. Hala ere, argumentua bada Letra-tamaina prozedurara pasatu da Sub, orduan hautatutako gelaxka sorta erabiltzaileak zehaztutako letra-tamaina ezarriko da.

VBA Azpi-prozedura: 2. adibidea: Erdian Lerrokatzea eta letra lodia Hautatutako Gelaxken barrutian

Ondorengo prozedura aztertu berri denaren antzekoa da, baina oraingoan, tamaina aldatu beharrean, letra lodiaren estiloa aplikatzen dio hautatutako gelaxka sortari. Hau prozedura adibide bat da Sub, argudiorik hartzen ez duena:

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

Excel VBA-n "Sub" prozedura deitzea

Deitu VBA prozedura "Sub" beste prozedura batetik

VBA prozedura bati deitzeko Sub beste VBA prozedura batetik, gako-hitza idatzi behar duzu Deitu, prozeduraren izena Sub eta gehiago parentesi artean prozeduraren argudioak daude. Hau beheko adibidean erakusten da:

Sub main() Call Format_Centered_And_Sized(20) End Sub

Prozedura bada Formatua_Zentratuta_Eta_Tamaina argumentu bat baino gehiago ditu, komaz bereizi behar dira. Horrela:

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

Deitu VBA prozedura "Sub" lan-orritik

Prozedura Sub ezin da zuzenean Excel orri-gelaxka batean sartu, prozedura batekin egin daitekeen bezala Funtzioprozedura delako Sub ez du baliorik itzultzen. Hala ere, prozedurak Sub, argudiorik ez dutenak eta gisa deklaratzen direnak Publikoa (behean erakusten den moduan) lan-orriaren erabiltzaileentzat eskuragarri egongo da. Horrela, goian aipaturiko prozedura sinpleak badira Sub Visual Basic Editor-eko modulu batean txertatuta, prozedura Formatua_Zentratuta_Eta_Lodia Excel lan-orri batean erabiltzeko erabilgarri egongo da eta prozedura Formatua_Zentratuta_Eta_Tamaina – ez da erabilgarri egongo argudioak dituelako.

Hona hemen prozedura bat exekutatzeko (edo exekutatzeko) modu erraz bat Sub, lan-orritik eskuragarri:

  • Prentsa Alt + F8 (sakatu tekla Alt eta sakatuta eduki bitartean, sakatu tekla F8).
  • Agertzen den makroen zerrendan, hautatu exekutatu nahi duzuna.
  • Prentsa Korrika egin (Korrika egin)

Prozedura bat egiteko Sub azkar eta erraz, teklatuko lasterbide bat eslei diezaiokezu. Honetarako:

  • Prentsa Alt + F8.
  • Agertzen den makroen zerrendan, hautatu teklatuko lasterbidea esleitu nahi diozun.
  • Prentsa parametroak (Aukerak) eta agertzen den elkarrizketa-koadroan, sartu teklatuko lasterbidea.
  • Prentsa OK eta itxi elkarrizketa-koadroa Macro (Makroa).

Arreta: Makro bati teklatuko lasterbidea esleitzean, ziurtatu ez dela Excel-en estandar gisa erabiltzen (adibidez, Ktrl + C). Dagoeneko teklatuko lasterbide bat hautatzen baduzu, makroari esleituko zaio berriro, eta, ondorioz, erabiltzaileak makroa abiaraz dezake ustekabean.

VBA prozeduraren esparrua

Tutorial honen 2. zatian aldagaien eta konstanteen esparrua eta gako-hitzen rola eztabaidatu zen. Publikoa и Pribatua. Gako-hitz hauek VBA prozedurekin ere erabil daitezke:

Public Sub AddToCells(i As Integer) ... End Sub
Prozeduraren adierazpenaren aurretik gako-hitza bada Publikoa, orduan prozedura VBA proiektu horretako modulu guztien eskura egongo da.
Private Sub AddToCells(i As Integer) ... End Sub
Prozeduraren adierazpenaren aurretik gako-hitza bada Pribatua, orduan prozedura hau oraingo modulurako bakarrik egongo da erabilgarri. Ezin da deitu beste edozein modulutan edo Excel lan-liburu batetik.

Gogoratu VBA prozedura bat deklaratu aurretik bada Funtzio or Sub gako-hitza ez da txertatzen, propietate lehenetsia ezarri da prozedurarako Publikoa (hau da, VBA proiektu honetan edonon egongo da eskuragarri). Hau deklarazio aldakorren aldean dago, lehenespenez Pribatua.

Irteera goiztiarra VBA prozeduretatik "Funtzioa" eta "Sub"

VBA prozedura baten exekuzioa amaitu behar baduzu Funtzio or Sub, bere amaiera naturalaren zain egon gabe, orduan horretarako operadoreak daude Irteera funtzioa и Irten Azpi. Eragile hauen erabilera behean erakusten da prozedura sinple bat erabiliz adibide gisa. FuntzioEragiketa gehiago egiteko argumentu positiboa jasotzea espero duena. Prozedurari balio ez-positibo bat pasatzen bazaio, ezin izango da beste eragiketarik egin, beraz erabiltzaileari errore-mezu bat erakutsi behar zaio eta prozedura berehala irten behar da:

Funtzioa VAT_Amount(sVAT_Rate Single As) As Single VAT_Amount = 0 If sVAT_Rate <= 0 Then MsgBox "sVAT_Rate-ren balio positiboa espero zen baina jaso" & sVAT_Rate Irteera funtzioa Amaitu bada ... Amaitu funtzioa

Kontuan izan prozedura amaitu aurretik Funtzio - BEZ_zenbatekoa, VBA funtzio integratua txertatzen da kodean MsgBox, erabiltzaileari abisu-leiho bat erakusten diona.

Utzi erantzun bat