"Funktioun" an "Sub" Prozeduren an VBA

Built-in VBA Funktiounen

Ier Dir ufänkt Är eege VBA Funktiounen ze kreéieren, ass et gutt ze wëssen datt Excel VBA eng räich Sammlung vu prebuilt agebaute Funktiounen huet, déi Dir benotze kënnt wann Dir Äre Code schreift.

Eng Lëscht vun dëse Funktiounen kann am VBA Editor gekuckt ginn:

  • Öffnen en Excel Workbook a starten de VBA Editor (klickt fir dëst ze maachen Alt + F11), an dann dréckt F2.
  • Wielt eng Bibliothéik aus der Dropdown-Lëscht uewe lénks um Écran VBA.
  • Eng Lëscht vun gebaut-an VBA Klassen a Funktiounen wäert schéngen. Klickt op de Funktiounsnumm fir seng kuerz Beschreiwung um Enn vun der Fënster ze weisen. dréckt F1 wäert d'Online Hëllef Säit fir dës Fonktioun opmaachen.

Zousätzlech kann eng komplett Lëscht vun agebaute VBA Funktiounen mat Beispiller am Visual Basic Developer Center fonnt ginn.

Benotzerdefinéiert Prozeduren "Funktioun" an "Sub" an VBA

An Excel Visual Basic gëtt eng Rei vu Kommandoen, déi eng spezifesch Aufgab ausféieren, an eng Prozedur gesat. Funktioun (Funktioun) oder sub (Subroutine). Den Haaptunterschied tëscht de Prozeduren Funktioun и sub ass, datt d'Prozedur Funktioun zréck Resultat, Prozedur sub - net.

Dofir, wann Dir Aktiounen ausféiere musst an e Resultat kréien (zum Beispill e puer Zuelen summéieren), da gëtt d'Prozedur normalerweis benotzt Funktioun, a fir einfach e puer Aktiounen auszeféieren (zum Beispill d'Formatéierung vun enger Grupp vun Zellen änneren), musst Dir d'Prozedur auswielen sub.

Argumenter

Verschidde Donnéeë kënnen op VBA Prozedure mat Argumenter weiderginn. D'Argumentlëscht gëtt uginn wann Dir eng Prozedur deklaréiert. Zum Beispill, d'Prozedur sub an VBA füügt dat gegebene Ganzt (Integer) un all Zell an der gewielter Gamme. Dir kënnt dës Zuel un d'Prozedur mat engem Argument weiderginn, wéi dëst:

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

Denkt drun datt Argumenter fir Prozeduren hunn Funktioun и sub an VBA ass fakultativ. E puer Prozeduren erfuerderen keng Argumenter.

Optional Argumenter

VBA Prozeduren kënnen fakultativ Argumenter hunn. Dëst sinn Argumenter déi de Benotzer ka spezifizéieren wa se wëllen, a wa se ewechgelooss ginn, benotzt d'Prozedur d'Standardwäerter fir si.

Zréck op dat viregt Beispill, fir en ganzt Argument fir eng Funktioun fakultativ ze maachen, géif et esou deklaréiert ginn:

Sub AddToCells(Optional i As Integer = 0)

An dësem Fall ass d'ganz Zuel Argument i de Standard wäert 0 sinn.

Et kënne verschidde fakultativ Argumenter an enger Prozedur sinn, déi all um Enn vun der Argumentlëscht opgelëscht sinn.

Argumenter duerch Wäert an duerch Referenz weiderginn

Argumenter am VBA kënnen op zwou Weeër op eng Prozedur weidergeleet ginn:

  • By Val - en Argument duerch Wäert weiderginn. Dëst bedeit datt nëmmen de Wäert (dat ass eng Kopie vum Argument) un d'Prozedur weidergeleet gëtt, an dofir all Ännerungen, déi am Argument an der Prozedur gemaach goufen, verluer goen wann d'Prozedur eriwwer ass.
  • Vun Ref - en Argument duerch Referenz weiderginn. Dat ass, déi tatsächlech Adress vun der Argumenterplaz an der Erënnerung gëtt un d'Prozedur weiderginn. All Ännerunge fir en Argument an der Prozedur ginn gespäichert wann d'Prozedur ofleeft.

Benotzen Schlësselwieder By Val or Vun Ref an der Prozedur Deklaratioun kënnt Dir uginn wéi d'Argument un d'Prozedur weidergeleet gëtt. Dëst gëtt an de Beispiller hei ënnen gewisen:

Sub AddToCells(ByVal i As Integer) ... Enn Sub
An dësem Fall ass d'ganz Zuel Argument i duerch Wäert passéiert. Nodeems Dir d'Prozedur verlooss huet sub all gemaach mat i Ännerungen wäert verluer ginn.
Sub AddToCells(ByRef i As Integer) ... End Sub
An dësem Fall ass d'ganz Zuel Argument i duerch Referenz passéiert. Nodeems Dir d'Prozedur verlooss huet sub all gemaach mat i d'Ännerunge ginn an der Variabel gespäichert déi un d'Prozedur passéiert gouf sub.

Denkt drun datt d'Argumenter am VBA duerch Referenz par défaut passéiert ginn. An anere Wierder, wann Schlësselwieder net benotzt ginn By Val or Vun Ref, da gëtt d'Argument duerch Referenz weiderginn.

Ier Dir mat de Prozeduren viru geet Funktioun и sub méi am Detail wäert et nëtzlech sinn eng aner kucken op d'Fonctiounen an Differenzen tëscht dësen zwou Zorte vu Prozeduren. Déi folgend sinn kuerz Diskussiounen iwwer VBA Prozeduren Funktioun и sub an einfach Beispiller ginn gewisen.

VBA Prozedur "Funktioun"

De VBA Editor erkennt d'Prozedur Funktiounwann et eng Grupp vu Befehle begéint, déi tëscht de folgenden Ëffnungs- a Schlussaussoen zougemaach gëtt:

Funktioun ... Enn Funktioun

Wéi virdru scho gesot, d'Prozedur Funktioun am VBA (am Géigesaz zu sub) gëtt e Wäert zréck. Déi folgend Regele gëlle fir Wäerter zréck:

  • D'Datentyp vum Retourwäert muss am Header vun der Prozedur deklaréiert ginn Funktioun.
  • D'Variabel déi de Retourwäert enthält muss d'selwecht genannt ginn wéi d'Prozedur Funktioun. Dës Variabel muss net separat deklaréiert ginn, well se ëmmer als integralen Deel vun der Prozedur existéiert. Funktioun.

Dëst ass gutt am folgende Beispill illustréiert.

VBA Funktioun Beispill: Leeschtunge eng mathematesch Operatioun op 3 Zuelen

Déi folgend ass e Beispill vun engem VBA Prozedur Code Funktioun, déi dräi Argumenter vun Typ hëlt double (Double-Präzisioun schwiewend-Punkt Zuelen). Als Resultat gëtt d'Prozedur eng aner Zuel vun Typ zréck doublegläich wéi d'Zomm vun den éischten zwee Argumenter minus dat drëtt Argument:

Funktioun SumMinus(dNum1 Als Duebel, dNum2 Als Duebel, dNum3 Als Duebel) Als Duebel SumMinus = dNum1 + dNum2 - dNum3 Endfunktioun

Dëst ganz einfach VBA Prozedur Funktioun illustréiert wéi Daten duerch Argumenter an eng Prozedur weidergeleet ginn. Dir kënnt gesinn datt d'Datentyp, déi vun der Prozedur zréckkomm ass, definéiert ass double (d'Wierder soen Wéi duebel no der Lëscht vun den Argumenter). Dëst Beispill weist och wéi d'Resultat vun der Prozedur Funktioun gespäichert an enger Variabel mam selwechten Numm wéi de Prozedurnumm.

Rufft d'VBA Prozedur "Funktioun"

Wann der uewen einfach Prozedur Funktioun agebaut an e Modul am Visual Basic Editor, et kann aus anere VBA Prozeduren genannt ginn oder op engem Aarbechtsblat an engem Excel Workbook benotzt ginn.

Call VBA Prozedur "Funktioun" vun enger anerer Prozedur

Prozedur Funktioun kann vun enger anerer VBA Prozedur genannt ginn andeems Dir dës Prozedur einfach un eng Variabel zougewisen. Déi folgend Beispill weist en Opruff un eng Prozedur Summinus, déi uewen definéiert gouf.

Sub Haapt () Dim total als Duebel total = SumMinus (5, 4, 3) Enn Sub

Call VBA Prozedur "Funktioun" vun engem Aarbechtsblat

VBA Prozedur Funktioun kann aus engem Excel Aarbechtsblat op déiselwecht Manéier wéi all aner agebauter Excel Funktioun genannt ginn. Dofir ass d'Prozedur am fréiere Beispill erstallt Funktioun - Summinus kann genannt ginn andeems Dir de folgenden Ausdrock an eng Aarbechtsblatzell aginn:

=SumMinus(10, 5, 2)

VBA Prozedur «Sub»

De VBA Redakter versteet, datt et eng Prozedur virun ass subwann et eng Grupp vu Befehle begéint, déi tëscht de folgenden Ëffnungs- a Schlussaussoen zougemaach gëtt:

Sub ... Enn Sub

VBA Prozedur "Sub": Beispill 1. Zentrum Ausrichtung a Schrëftgréisst änneren an engem ausgewielt Gamme vun Zellen

Betruecht e Beispill vun enger einfacher VBA Prozedur sub, deem seng Aufgab ass d'Formatéierung vun der gewielter Zellbereich z'änneren. D'Zellen sinn zentréiert (souwuel vertikal an horizontal) an d'Schrëftgréisst gëtt op d'Benotzerspezifizéierter geännert:

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

Dës Prozedur sub mécht Aktiounen awer bréngt kee Resultat zréck.

Dëst Beispill benotzt och en Optional Argument Schrëftgréisst. Wann d'Argument Schrëftgréisst net un d'Prozedur iwwerginn sub, dann ass säi Standardwäert 10. Allerdéngs, wann d'Argument Schrëftgréisst Prozedur iwwerginn sub, da gëtt de gewielte Sortiment vun Zellen op d'Schrëftgréisst gesat, déi vum Benotzer uginn ass.

VBA Sub Prozedur: Beispill 2: Center Align a Fett Schrëft am gewielte Beräich vun Zellen

Déi folgend Prozedur ass ähnlech wéi déi just diskutéiert, awer dës Kéier, anstatt d'Gréisst z'änneren, gëlt se e fett Schrëftstil op déi gewielte Gamme vun Zellen. Dëst ass e Beispill Prozedur sub, déi keng Argumenter hëlt:

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

Opruff "Sub" Prozedur an Excel VBA

Call VBA Prozedur "Sub" vun enger anerer Prozedur

Fir eng VBA Prozedur ze ruffen sub vun enger anerer VBA Prozedur, Dir musst de Schlësselwuert schreiwen Opruff, Prozedur Numm sub a weider am Klammer sinn d'Argumenter vun der Prozedur. Dëst gëtt am Beispill hei ënnen gewisen:

Sub main () Call Format_Centered_And_Sized (20) Enn Sub

Wann d'Prozedur Format_Centered_And_Sized huet méi wéi een Argument, si mussen duerch Komma getrennt ginn. Esou:

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

Call VBA Prozedur "Sub" vum Aarbechtsblat

Prozedur sub kann net direkt an eng Excel Blat Zell aginn ginn, wéi mat enger Prozedur gemaach ginn Funktiounwell d'Prozedur sub gëtt kee Wäert zréck. Allerdéngs Prozeduren sub, déi keng Argumenter hunn an als deklaréiert ginn ëffentlech (wéi hei ënnendrënner) wäert fir Benotzer vum Aarbechtsblat verfügbar sinn. Also, wann déi einfach Prozeduren uewen diskutéiert sub agebaut an e Modul am Visual Basic Editor, d'Prozedur Format_Centered_And_Bold wäert verfügbar sinn fir an engem Excel Aarbechtsblat ze benotzen, an d'Prozedur Format_Centered_And_Sized - wäert net verfügbar sinn, well et Argumenter huet.

Hei ass en einfache Wee fir eng Prozedur auszeféieren (oder auszeféieren). sub, zougänglech vum Aarbechtsblat:

  • Press Alt + F8 (dréckt Taste Alt an iwwerdeems et gedréckt, Press de Schlëssel F8).
  • An der Lëscht vun Makroen déi erschéngt, wielt deen deen Dir wëllt lafen.
  • Press Run (lafen)

Fir eng Prozedur auszeféieren sub séier an einfach, Dir kënnt eng Tastatur Ofkiirzung un et zougewisen. Dofir:

  • Press Alt + F8.
  • An der Lëscht vun de Makroen déi erschéngt, wielt deen deen Dir eng Tastatur Ofkiirzung zouweise wëllt.
  • Press Parameteren (Optiounen) an an der Dialogbox déi erschéngt, gitt d'Tastatur Ofkiirzung.
  • Press OK an den Dialog zoumaachen Macro (Makro).

Opgepasst: Wann Dir eng Tastatur Ofkiirzung un e Makro zougitt, gitt sécher datt se net als Standard an Excel benotzt gëtt (z. Ctrl + C). Wann Dir eng scho bestehend Tastatur Ofkiirzung auswielt, gëtt se op de Makro zougewisen, an als Resultat kann de Benotzer de Macro zoufälleg starten.

VBA Prozedur Ëmfang

Deel 2 vun dësem Tutorial diskutéiert den Ëmfang vu Variablen a Konstanten an d'Roll vu Schlësselwieder. ëffentlech и private. Dës Schlësselwieder kënnen och mat VBA Prozedure benotzt ginn:

Public Sub AddToCells(i As Integer) ... End Sub
Wann d'Prozedur Deklaratioun vum Schlësselwuert viraus ass ëffentlech, da wäert d'Prozedur fir all Moduler an deem VBA-Projet disponibel sinn.
Private Sub AddToCells(i As Integer) ... End Sub
Wann d'Prozedur Deklaratioun vum Schlësselwuert viraus ass private, da wäert dës Prozedur nëmme fir den aktuelle Modul verfügbar sinn. Et kann net an engem anere Modul oder aus engem Excel Aarbechtsbuch genannt ginn.

Erënneren, datt wann virun engem VBA Prozedur deklaréiert Funktioun or sub Schlësselwuert net agebaut ass, ass d'Standardeigenschaft fir d'Prozedur gesat ëffentlech (dat ass, et wäert iwwerall an dësem VBA Projet verfügbar sinn). Dëst ass am Géigesaz zu variabelen Deklaratiounen, déi par défaut sinn private.

Fréi Austrëtt vu VBA Prozeduren "Funktioun" an "Sub"

Wann Dir musst d'Ausféierung vun enger VBA Prozedur ofschléissen Funktioun or sub, ouni op säin natierlechen Enn ze waarden, da ginn et Bedreiwer Exit Funktioun и Austrëtt Sub. D'Benotzung vun dësen Betreiber gëtt ënnendrënner mat enger einfacher Prozedur als Beispill gewisen. FunktiounA déi erwaart e positiven Argument ze kréien fir weider Operatiounen auszeféieren. Wann en net-positiven Wäert un d'Prozedur weidergeleet gëtt, da kënne keng weider Operatioune gemaach ginn, sou datt de Benotzer eng Fehlermeldung gewise kritt an d'Prozedur soll direkt ausgoen:

Funktioun VAT_Amount(sVAT_Rate As Single) As Single VAT_Amount = 0 Wann sVAT_Rate <= 0 Dann MsgBox "Erwaart e Positive Wäert vun sVAT_Rate awer kritt" & sVAT_Rate Exit Funktioun Enn Wann ... End Funktioun

Maacht weg datt ier Dir d'Prozedur ofgeschloss hutt Funktioun - TVA_Betrag, gëtt eng agebaute VBA Funktioun an de Code agebaut MsgBox, déi eng Warnung Popup fir de Benotzer weist.

Hannerlooss eng Äntwert