"Funksie" en "Sub" Prosedures in VBA

Ingeboude VBA-funksies

Voordat jy jou eie VBA-funksies begin skep, is dit goed om te weet dat Excel VBA 'n ryk versameling voorafgeboude ingeboude funksies het wat jy kan gebruik terwyl jy jou kode skryf.

'n Lys van hierdie funksies kan in die VBA-redigeerder bekyk word:

  • Maak 'n Excel-werkboek oop en begin die VBA-redigeerder (klik om dit te doen Alt + F11), en druk dan op F2.
  • Kies 'n biblioteek uit die aftreklys links bo op die skerm VBA.
  • 'n Lys van ingeboude VBA-klasse en -funksies sal verskyn. Klik op die funksienaam om sy kort beskrywing onderaan die venster te vertoon. druk F1 sal die aanlyn-hulpbladsy vir daardie kenmerk oopmaak.

Daarbenewens kan 'n volledige lys van ingeboude VBA-funksies met voorbeelde by die Visual Basic-ontwikkelaarsentrum gevind word.

Pasgemaakte prosedures "Funksie" en "Sub" in VBA

In Excel Visual Basic word 'n stel opdragte wat 'n spesifieke taak uitvoer, in 'n prosedure geplaas. funksie (Funksie) of sub (Subroutine). Die belangrikste verskil tussen die prosedures funksie и sub is dit die prosedure funksie gee resultaat, prosedure terug sub – nie.

Daarom, as jy aksies moet uitvoer en 'n resultaat moet kry (byvoorbeeld, som verskeie getalle), dan word die prosedure gewoonlik gebruik funksie, en om net 'n paar aksies uit te voer (byvoorbeeld, verander die formatering van 'n groep selle), moet jy die prosedure kies sub.

argumente

Verskeie data kan met behulp van argumente na VBA-prosedures deurgegee word. Die argumentlys word gespesifiseer wanneer 'n prosedure verklaar word. Byvoorbeeld, die prosedure sub in VBA voeg die gegewe heelgetal (Geheelgetal) by elke sel in die geselekteerde reeks. Jy kan hierdie nommer na die prosedure deurgee deur 'n argument soos hierdie te gebruik:

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

Hou in gedagte dat argumente vir prosedures funksie и sub in VBA is opsioneel. Sommige prosedures vereis nie argumente nie.

Opsionele argumente

VBA-prosedures kan opsionele argumente hê. Dit is argumente wat die gebruiker kan spesifiseer as hulle wil, en as hulle weggelaat word, gebruik die prosedure die verstekwaardes daarvoor.

Om terug te keer na die vorige voorbeeld, om 'n heelgetalargument vir 'n funksie opsioneel te maak, sal dit soos volg verklaar word:

Sub AddToCells(Opsioneel i As Heelgetal = 0)

In hierdie geval, die heelgetal argument i die verstek sal 0 wees.

Daar kan verskeie opsionele argumente in 'n prosedure wees, wat almal aan die einde van die argumentlys gelys word.

Deur argumente deur waarde en deur verwysing deur te gee

Argumente in VBA kan op twee maniere na 'n prosedure oorgedra word:

  • ByVal – 'n argument volgens waarde deur te gee. Dit beteken dat slegs die waarde (dit is 'n kopie van die argument) na die prosedure oorgedra word, en daarom sal enige veranderinge wat aan die argument binne die prosedure gemaak word, verlore gaan wanneer die prosedure afsluit.
  • Deur Verw – 'n argument deur verwysing deur te gee. Dit wil sê, die werklike adres van die argumentplek in die geheue word na die prosedure deurgegee. Enige veranderinge wat aan 'n argument binne die prosedure gemaak word, sal gestoor word wanneer die prosedure afsluit.

Gebruik sleutelwoorde ByVal or Deur Verw in die prosedureverklaring kan jy spesifiseer hoe die argument na die prosedure oorgedra word. Dit word in voorbeelde hieronder getoon:

Sub AddToCells(ByVal i As Heelgetal) ... End Sub
In hierdie geval, die heelgetal argument i deur waarde geslaag. Nadat u die prosedure verlaat het sub alles gemaak met i veranderinge sal verlore gaan.
Sub AddToCells(ByRef i As Heelgetal) ... End Sub
In hierdie geval, die heelgetal argument i deur verwysing geslaag. Nadat u die prosedure verlaat het sub alles gemaak met i die veranderinge sal gestoor word in die veranderlike wat na die prosedure oorgedra is sub.

Onthou dat argumente in VBA by verstek deur verwysing deurgegee word. Met ander woorde, as sleutelwoorde nie gebruik word nie ByVal or Deur Verw, dan sal die argument deur verwysing deurgegee word.

Voordat u met die prosedures voortgaan funksie и sub in meer besonderhede sal dit nuttig wees om weer na die kenmerke en verskille tussen hierdie twee tipes prosedures te kyk. Die volgende is kort besprekings van VBA-prosedures funksie и sub en eenvoudige voorbeelde word getoon.

VBA prosedure «Funksie»

Die VBA-redakteur herken die prosedure funksiewanneer dit 'n groep opdragte teëkom wat tussen die volgende openings- en slotstellings ingesluit is:

Funksie ... Einde Funksie

Soos vroeër genoem, die prosedure funksie in VBA (in teenstelling met sub) gee 'n waarde terug. Die volgende reëls geld vir terugkeerwaardes:

  • Die datatipe van die terugkeerwaarde moet in die opskrif van die prosedure verklaar word funksie.
  • Die veranderlike wat die terugkeerwaarde bevat, moet dieselfde as die prosedure genoem word funksie. Hierdie veranderlike hoef nie afsonderlik verklaar te word nie, aangesien dit altyd as 'n integrale deel van die prosedure bestaan. funksie.

Dit word goed geïllustreer in die volgende voorbeeld.

VBA funksie Voorbeeld: Uitvoer van 'n wiskundige bewerking op 3 getalle

Die volgende is 'n voorbeeld van 'n VBA-prosedurekode funksie, wat drie tipe argumente neem Dubbel (dubbel-presisie swaaipuntgetalle). As gevolg hiervan gee die prosedure 'n ander aantal tipe terug Dubbelgelyk aan die som van die eerste twee argumente minus die derde argument:

Funksie SumMinus(dNum1 As Dubbel, dNum2 As Dubbel, dNum3 As Dubbel) As Dubbel SomMinus = dNum1 + dNum2 - dNum3 Eindfunksie

Hierdie baie eenvoudige VBA-prosedure funksie illustreer hoe data deur argumente na 'n prosedure oorgedra word. Jy kan sien dat die datatipe wat deur die prosedure teruggestuur word gedefinieer word as Dubbel (sê die woorde As Dubbel na die lys argumente). Hierdie voorbeeld wys ook hoe die resultaat van die prosedure funksie gestoor in 'n veranderlike met dieselfde naam as die prosedurenaam.

Noem die VBA-prosedure "Funksie"

As die bogenoemde eenvoudige prosedure funksie in 'n module in die Visual Basic-redigeerder ingevoeg word, kan dit vanaf ander VBA-prosedures opgeroep word of op 'n werkblad in 'n Excel-werkboek gebruik word.

Roep VBA-prosedure "Funksie" vanaf 'n ander prosedure

Prosedure funksie kan vanaf 'n ander VBA-prosedure opgeroep word deur eenvoudig daardie prosedure aan 'n veranderlike toe te ken. Die volgende voorbeeld toon 'n oproep na 'n prosedure Summinus, wat hierbo gedefinieer is.

Sub hoof() Dim totaal as Dubbeltotaal = SumMinus(5, 4, 3) Einde Sub

Noem VBA-prosedure "Funksie" vanaf 'n werkblad

VBA prosedure funksie kan vanaf 'n Excel-werkblad op dieselfde manier as enige ander ingeboude Excel-funksie opgeroep word. Daarom is die prosedure wat in die vorige voorbeeld geskep is funksie - Summinus kan opgeroep word deur die volgende uitdrukking in 'n werkbladsel in te voer:

=SumMinus(10, 5, 2)

VBA prosedure «Sub»

Die VBA-redakteur verstaan ​​dat daar 'n prosedure voor is subwanneer dit 'n groep opdragte teëkom wat tussen die volgende openings- en slotstellings ingesluit is:

Sub ... End Sub

VBA-prosedure “Sub”: Voorbeeld 1. Sentrumbelyning en lettergrootte verander in 'n geselekteerde reeks selle

Beskou 'n voorbeeld van 'n eenvoudige VBA-prosedure sub, wie se taak is om die formatering van die geselekteerde reeks selle te verander. Die selle is gesentreer (beide vertikaal en horisontaal) en die lettergrootte word verander na die gebruiker-gespesifiseerde:

Sub Format_Centered_And_Sized(Opsioneel iFontSize As Heelgetal = 10) Selection.Horizontal Alignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

Hierdie prosedure sub voer handelinge uit, maar gee nie 'n resultaat terug nie.

Hierdie voorbeeld gebruik ook 'n Opsionele argument Skrifgrootte. As die argument Skrifgrootte nie na prosedure oorgedra word nie sub, dan is sy verstekwaarde 10. As die argument egter Skrifgrootte na prosedure oorgedra sub, dan sal die geselekteerde reeks selle ingestel word op die lettergrootte wat deur die gebruiker gespesifiseer is.

VBA Sub Prosedure: Voorbeeld 2: Sentrumbelyning en vet lettertipe in geselekteerde reeks selle

Die volgende prosedure is soortgelyk aan die een wat sopas bespreek is, maar hierdie keer, in plaas daarvan om die grootte te verander, pas dit 'n vet lettertipestyl toe op die geselekteerde reeks selle. Dit is 'n voorbeeldprosedure sub, wat geen argumente neem nie:

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

Oproep "Sub" Prosedure in Excel VBA

Bel VBA-prosedure "Sub" vanaf 'n ander prosedure

Om 'n VBA-prosedure te noem sub van 'n ander VBA-prosedure, moet jy die sleutelwoord skryf Bel, prosedure naam sub en verder tussen hakies is die argumente van die prosedure. Dit word in die voorbeeld hieronder getoon:

Sub hoof() Oproep Format_Centered_And_Sized(20) End Sub

As die prosedure Format_Centered_And_Sized meer as een argument het, moet hulle deur kommas geskei word. Soos hierdie:

Sub hoof() Oproep Format_Centered_And_Sized(arg1, arg2, ...) End Sub

Bel VBA-prosedure "Sub" vanaf werkblad

Prosedure sub kan nie direk in 'n Excel-bladsel ingevoer word nie, soos wat met 'n prosedure gedoen kan word funksieomdat die prosedure sub gee nie 'n waarde terug nie. Prosedures egter sub, wat geen argumente het nie en as verklaar word Openbare (soos hieronder getoon) sal beskikbaar wees vir gebruikers van die werkblad. Dus, as die eenvoudige prosedures hierbo bespreek sub ingevoeg in 'n module in die Visual Basic Editor, die prosedure Format_Centered_And_Bold beskikbaar sal wees vir gebruik in 'n Excel-werkblad, en die prosedure Format_Centered_And_Sized – sal nie beskikbaar wees nie, want dit het argumente.

Hier is 'n maklike manier om 'n prosedure uit te voer (of uit te voer). sub, toeganklik vanaf die werkblad:

  • Druk Alt + F8 (druk sleutel alt en terwyl jy dit ingedruk hou, druk die sleutel F8).
  • Kies die een wat jy wil laat loop in die lys makro's wat verskyn.
  • Druk Run (hardloop)

Om 'n prosedure uit te voer sub vinnig en maklik, jy kan 'n sleutelbordkortpad daaraan toewys. Vir dit:

  • Druk Alt + F8.
  • In die lys makro's wat verskyn, kies die een waaraan jy 'n sleutelbordkortpad wil toewys.
  • Druk Grense (Opsies) en in die dialoogkassie wat verskyn, voer die sleutelbordkortpad in.
  • Druk OK en maak die dialoog toe Makro (Makro).

aandag: Wanneer u 'n sleutelbordkortpad aan 'n makro toewys, maak seker dat dit nie as standaard in Excel gebruik word nie (bv. Ctrl + C). As jy 'n reeds bestaande sleutelbordkortpad kies, sal dit weer aan die makro toegewys word, en gevolglik kan die gebruiker die makro per ongeluk begin.

VBA Prosedure Omvang

Deel 2 van hierdie tutoriaal het die omvang van veranderlikes en konstantes en die rol van sleutelwoorde bespreek. Openbare и Privaat. Hierdie sleutelwoorde kan ook met VBA-prosedures gebruik word:

Publieke Sub AddToCells(i As Heelgetal) ... End Sub
As die prosedureverklaring deur die sleutelwoord voorafgegaan word Openbare, dan sal die prosedure vir alle modules in daardie VBA-projek beskikbaar wees.
Private Sub AddToCells(i As Heelgetal) ... End Sub
As die prosedureverklaring deur die sleutelwoord voorafgegaan word Privaat, dan sal hierdie prosedure slegs vir die huidige module beskikbaar wees. Dit kan nie opgeroep word terwyl dit in enige ander module of vanuit 'n Excel-werkboek is nie.

Onthou dat indien voor verklaar 'n VBA prosedure funksie or sub sleutelwoord nie ingevoeg is nie, is die verstek eiendom vir die prosedure gestel Openbare (dit wil sê, dit sal oral in hierdie VBA-projek beskikbaar wees). Dit is in teenstelling met veranderlike verklarings, wat by verstek is Privaat.

Vroeë uitgang van VBA-prosedures "Funksie" en "Sub"

As jy die uitvoering van 'n VBA-prosedure moet beëindig funksie or sub, sonder om te wag vir sy natuurlike einde, dan is daar operateurs hiervoor Verlaat funksie и Verlaat sub. Die gebruik van hierdie operateurs word hieronder getoon deur 'n eenvoudige prosedure as voorbeeld te gebruik. funksieA wat verwag om 'n positiewe argument te ontvang om verdere operasies uit te voer. As 'n nie-positiewe waarde na die prosedure oorgedra word, kan geen verdere bewerkings uitgevoer word nie, dus moet die gebruiker 'n foutboodskap gewys word en die prosedure moet onmiddellik verlaat:

Funksie VAT_Amount(sVAT_Rate As Enkel) As Enkel VAT_Amount = 0 As sVAT_Rate <= 0 Then MsgBox "Verwag 'n Positiewe waarde van sVAT_Rate maar ontvang " & sVAT_Rate Exit Function End If ... End Function

Neem asseblief kennis dat voor die voltooiing van die prosedure funksie - BTW_Bedrag, 'n ingeboude VBA-funksie word in die kode ingevoeg MsgBox, wat 'n waarskuwing-opspringer aan die gebruiker vertoon.

Lewer Kommentaar