"Funktion" og "Sub"-procedurer i VBA

Indbyggede VBA-funktioner

Inden du begynder at oprette dine egne VBA-funktioner, er det godt at vide, at Excel VBA har en rig samling af forudindbyggede indbyggede funktioner, som du kan bruge, mens du skriver din kode.

En liste over disse funktioner kan ses i VBA-editoren:

  • Åbn en Excel-projektmappe og start VBA-editoren (klik for at gøre dette Alt + F11), og tryk derefter på F2.
  • Vælg et bibliotek fra rullelisten øverst til venstre på skærmen VBA.
  • En liste over indbyggede VBA-klasser og funktioner vises. Klik på funktionsnavnet for at få vist dens korte beskrivelse nederst i vinduet. trykke F1 åbner onlinehjælpesiden for den funktion.

Derudover kan en komplet liste over indbyggede VBA-funktioner med eksempler findes i Visual Basic Developer Center.

Brugerdefinerede procedurer "Funktion" og "Sub" i VBA

I Excel Visual Basic placeres et sæt kommandoer, der udfører en bestemt opgave, i en procedure. Funktion (Funktion) eller Under (Subrutine). Den største forskel mellem procedurerne Funktion и Under er det proceduren Funktion returnerer resultat, procedure Under – ikke.

Derfor, hvis du har brug for at udføre handlinger og få et resultat (for eksempel summere flere tal), så bruges proceduren normalt Funktion, og for blot at udføre nogle handlinger (for eksempel ændre formateringen af ​​en gruppe af celler), skal du vælge proceduren Under.

argumenter

Forskellige data kan overføres til VBA-procedurer ved hjælp af argumenter. Argumentlisten angives, når en procedure erklæres. For eksempel proceduren Under i VBA tilføjer det givne heltal (heltal) til hver celle i det valgte område. Du kan videregive dette nummer til proceduren ved hjælp af et argument som dette:

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

Husk at have argumenter for procedurer Funktion и Under i VBA er valgfrit. Nogle procedurer kræver ikke argumenter.

Valgfrie argumenter

VBA-procedurer kan have valgfrie argumenter. Dette er argumenter, som brugeren kan angive, hvis de vil, og hvis de udelades, bruger proceduren standardværdierne for dem.

Vender vi tilbage til det foregående eksempel, for at gøre et heltalsargument til en funktion valgfrit, ville det blive erklæret sådan:

Sub AddToCells(Valgfri i Som heltal = 0)

I dette tilfælde heltalsargumentet i standard vil være 0.

Der kan være flere valgfrie argumenter i en procedure, som alle er angivet i slutningen af ​​argumentlisten.

Videregivelse af argumenter efter værdi og ved reference

Argumenter i VBA kan overføres til en procedure på to måder:

  • ByVal – videregivelse af et argument efter værdi. Det betyder, at kun værdien (det vil sige en kopi af argumentet) overføres til proceduren, og derfor vil alle ændringer, der foretages i argumentet inde i proceduren, gå tabt, når proceduren afsluttes.
  • AfRef – videregivelse af et argument ved henvisning. Det vil sige, at den faktiske adresse på argumentplaceringen i hukommelsen videregives til proceduren. Eventuelle ændringer i et argument inde i proceduren vil blive gemt, når proceduren afsluttes.

Brug af søgeord ByVal or AfRef i procedureerklæringen kan du angive, hvordan argumentet videregives til proceduren. Dette er vist i eksemplerne nedenfor:

Sub AddToCells(ByVal i As Integer) ... End Sub
I dette tilfælde heltalsargumentet i passeret af værdi. Efter at have forladt proceduren Under alle lavet med i ændringer vil gå tabt.
Sub AddToCells(ByRef i As Integer) ... End Sub
I dette tilfælde heltalsargumentet i bestået ved reference. Efter at have forladt proceduren Under alle lavet med i ændringerne vil blive gemt i den variabel, der blev overført til proceduren Under.

Husk at argumenter i VBA sendes som reference som standard. Med andre ord, hvis der ikke bruges søgeord ByVal or AfRef, så vil argumentet blive videregivet ved reference.

Før du fortsætter med procedurerne Funktion и Under mere detaljeret vil det være nyttigt at tage endnu et kig på funktionerne og forskellene mellem disse to typer procedurer. Det følgende er korte diskussioner af VBA-procedurer Funktion и Under og enkle eksempler er vist.

VBA procedure «Funktion»

VBA-editoren genkender proceduren Funktionnår den støder på en gruppe af kommandoer indesluttet mellem følgende indledende og afsluttende sætninger:

Funktion ... Afslut funktion

Som nævnt tidligere, proceduren Funktion i VBA (i modsætning til Under) returnerer en værdi. Følgende regler gælder for returværdier:

  • Returværdiens datatype skal angives i procedurens overskrift Funktion.
  • Variablen, der indeholder returværdien, skal have samme navn som proceduren Funktion. Denne variabel skal ikke deklareres separat, da den altid eksisterer som en integreret del af proceduren. Funktion.

Dette er godt illustreret i det følgende eksempel.

VBA-funktionseksempel: Udførelse af en matematisk operation på 3 tal

Det følgende er et eksempel på en VBA-procedurekode Funktion, som tager tre argumenter af typen Dobbelt (dobbelt-præcision flydende kommatal). Som et resultat returnerer proceduren et andet typenummer Dobbeltlig med summen af ​​de to første argumenter minus det tredje argument:

Funktion SumMinus(dNum1 Som Dobbelt, dNum2 Som Dobbelt, dNum3 Som Dobbelt) Som Dobbelt SumMinus = dNum1 + dNum2 - dNum3 Slutfunktion

Denne meget enkle VBA-procedure Funktion illustrerer, hvordan data sendes til en procedure gennem argumenter. Du kan se, at den datatype, der returneres af proceduren, er defineret som Dobbelt (ordene siger Som dobbelt efter listen over argumenter). Dette eksempel viser også, hvordan resultatet af proceduren Funktion gemt i en variabel med samme navn som procedurenavnet.

Kalde VBA-proceduren "Funktion"

Hvis ovenstående simple procedure Funktion indsat i et modul i Visual Basic-editoren, kan det kaldes fra andre VBA-procedurer eller bruges på et regneark i en Excel-projektmappe.

Kald VBA-proceduren "Funktion" fra en anden procedure

Procedure Funktion kan kaldes fra en anden VBA-procedure ved blot at tildele denne procedure til en variabel. Følgende eksempel viser et kald til en procedure Summinus, som blev defineret ovenfor.

Sub main() Dim total som Dobbelt total = SumMinus(5, 4, 3) End Sub

Kald VBA-proceduren "Funktion" fra et arbejdsark

VBA procedure Funktion kan kaldes fra et Excel-regneark på samme måde som enhver anden indbygget Excel-funktion. Derfor er proceduren oprettet i det foregående eksempel Funktion - Summinus kan kaldes ved at indtaste følgende udtryk i en regnearkscelle:

=SumMinus(10, 5, 2)

VBA-procedure «Sub»

VBA-redaktøren forstår, at der er en procedure foran sig Undernår den støder på en gruppe af kommandoer indesluttet mellem følgende indledende og afsluttende sætninger:

Sub ... End Sub

VBA-procedure "Sub": Eksempel 1. Centerjustering og skriftstørrelse ændres i et udvalgt celleområde

Overvej et eksempel på en simpel VBA-procedure Under, hvis opgave er at ændre formateringen af ​​det valgte celleområde. Cellerne er centreret (både lodret og vandret), og skriftstørrelsen ændres til den brugerspecificerede:

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

Denne procedure Under udfører handlinger, men returnerer ikke et resultat.

Dette eksempel bruger også et valgfrit argument Skriftstørrelse. Hvis argumentet Skriftstørrelse ikke overgået til proceduren Under, så er dens standardværdi 10. Men hvis argumentet Skriftstørrelse overgået til procedure Under, så vil det valgte celleområde blive indstillet til den skriftstørrelse, der er angivet af brugeren.

VBA-underprocedure: Eksempel 2: Centrerjustering og fed skrift i udvalgt celleområde

Følgende procedure ligner den, der lige er blevet diskuteret, men denne gang, i stedet for at ændre størrelsen, anvender den en fed skrifttype på det valgte celleområde. Dette er et eksempel på en procedure Under, som ikke tager nogen argumenter:

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

Kald "Sub"-procedure i Excel VBA

Kald VBA procedure "Sub" fra en anden procedure

At kalde en VBA-procedure Under fra en anden VBA-procedure, skal du skrive nøgleordet Ring til os på, procedurenavn Under og yderligere i parentes er procedurens argumenter. Dette er vist i eksemplet nedenfor:

Sub main() Kald Format_Centered_And_Sized(20) End Sub

Hvis proceduren Format_Centered_And_Sized har mere end ét argument, skal de adskilles med kommaer. Sådan her:

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

Kald VBA-proceduren "Sub" fra arbejdsarket

Procedure Under kan ikke indtastes direkte i en Excel-arkcelle, som det kan gøres med en procedure Funktionfordi proceduren Under returnerer ikke en værdi. Dog procedurer Under, som ikke har nogen argumenter og er erklæret som offentlige (som vist nedenfor) vil være tilgængelig for brugere af arbejdsarket. Således, hvis de simple procedurer diskuteret ovenfor Under indsat i et modul i Visual Basic Editor, proceduren Format_Centered_And_Fed vil være tilgængelig til brug i et Excel-regneark, og proceduren Format_Centered_And_Sized – vil ikke være tilgængelig, fordi den har argumenter.

Her er en nem måde at køre (eller udføre) en procedure på Under, tilgængelig fra arbejdsarket:

  • Presse Alt + F8 (tryk på tasten andre og mens du holder den nede, tryk på tasten F8).
  • På listen over makroer, der vises, skal du vælge den, du vil køre.
  • Presse Kør (løb)

At udføre en procedure Under hurtigt og nemt kan du tildele en tastaturgenvej til den. For det:

  • Presse Alt + F8.
  • På listen over makroer, der vises, skal du vælge den, du vil tildele en tastaturgenvej til.
  • Presse parametre (Valgmuligheder), og indtast tastaturgenvejen i dialogboksen, der vises.
  • Presse OK og luk dialogen Makro (Makro).

Bemærk: Når du tildeler en tastaturgenvej til en makro, skal du sørge for, at den ikke bruges som standard i Excel (f.eks. Ctrl + C). Hvis du vælger en allerede eksisterende tastaturgenvej, vil den blive gentildelt til makroen, og som et resultat kan brugeren starte makroen ved et uheld.

VBA-procedureomfang

Del 2 af denne øvelse diskuterede omfanget af variabler og konstanter og nøgleordenes rolle. offentlige и Privat. Disse nøgleord kan også bruges med VBA-procedurer:

Public Sub AddToCells(i As Integer) ... End Sub
Hvis procedureerklæringen indledes med nøgleordet offentlige, så vil proceduren være tilgængelig for alle moduler i det pågældende VBA-projekt.
Private Sub AddToCells(i As Integer) ... End Sub
Hvis procedureerklæringen indledes med nøgleordet Privat, så vil denne procedure kun være tilgængelig for det aktuelle modul. Det kan ikke kaldes, mens det er i noget andet modul eller fra en Excel-projektmappe.

Husk, at hvis før du erklærer en VBA-procedure Funktion or Under nøgleordet ikke er indsat, er standardegenskaben indstillet for proceduren offentlige (det vil sige, at den vil være tilgængelig overalt i dette VBA-projekt). Dette er i modsætning til variable deklarationer, som som standard er Privat.

Tidlig afslutning fra VBA-procedurerne "Funktion" og "Sub"

Hvis du skal afslutte udførelsen af ​​en VBA-procedure Funktion or Under, uden at vente på dens naturlige afslutning, så er der operatører til dette Afslut funktion и Exit Sub. Brugen af ​​disse operatorer er vist nedenfor med en simpel procedure som eksempel. FunktionEn, der forventer at modtage et positivt argument for at udføre yderligere operationer. Hvis en ikke-positiv værdi overføres til proceduren, kan der ikke udføres yderligere handlinger, så brugeren skal få vist en fejlmeddelelse, og proceduren skal afsluttes med det samme:

Funktion VAT_Amount(sVAT_Rate As Single) As Single VAT_Amount = 0 Hvis sVAT_Rate <= 0 Then MsgBox "Forventede en positiv værdi af sVAT_Rate men modtaget " & sVAT_Rate Afslut funktion End If ... End Function

Bemærk venligst, at før du afslutter proceduren Funktion - VAT_Beløb, er en indbygget VBA-funktion indsat i koden MsgBox, som viser en advarselspopup til brugeren.

Giv en kommentar