"Funktion" och "Sub"-procedurer i VBA

Inbyggda VBA-funktioner

Innan du börjar skapa dina egna VBA-funktioner är det bra att veta att Excel VBA har en rik samling av förinbyggda inbyggda funktioner som du kan använda när du skriver din kod.

En lista över dessa funktioner kan ses i VBA-redigeraren:

  • Öppna en Excel-arbetsbok och starta VBA-redigeraren (klicka för att göra detta Alt + F11) och tryck sedan på F2.
  • Välj ett bibliotek från rullgardinsmenyn längst upp till vänster på skärmen VBA.
  • En lista med inbyggda VBA-klasser och funktioner visas. Klicka på funktionsnamnet för att visa dess korta beskrivning längst ner i fönstret. brådskande F1 kommer att öppna onlinehjälpsidan för den funktionen.

Dessutom finns en komplett lista med inbyggda VBA-funktioner med exempel på Visual Basic Developer Center.

Anpassade procedurer "Funktion" och "Sub" i VBA

I Excel Visual Basic placeras en uppsättning kommandon som utför en specifik uppgift i en procedur. Funktion (Funktion) eller Sub (Subrutin). Den största skillnaden mellan procedurerna Funktion и Sub är det förfarandet Funktion returnerar resultat, procedur Sub – inte.

Därför, om du behöver utföra åtgärder och få ett resultat (till exempel summera flera siffror), används vanligtvis proceduren Funktion , och för att helt enkelt utföra vissa åtgärder (till exempel ändra formateringen av en grupp av celler), måste du välja proceduren Sub.

Argument

Olika data kan skickas till VBA-procedurer med hjälp av argument. Argumentlistan specificeras när en procedur deklareras. Till exempel proceduren Sub i VBA lägger till det givna heltal (heltal) till varje cell i det valda intervallet. Du kan skicka detta nummer till proceduren med ett argument, så här:

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

Tänk på att ha argument för procedurer Funktion и Sub i VBA är valfritt. Vissa procedurer kräver inga argument.

Valfria argument

VBA-procedurer kan ha valfria argument. Detta är argument som användaren kan ange om de vill, och om de utelämnas använder proceduren standardvärdena för dem.

För att återgå till föregående exempel, för att göra ett heltalsargument till en funktion valfritt, skulle det deklareras så här:

Sub AddToCells(Valfritt i Som heltal = 0)

I det här fallet heltalsargumentet i standard är 0.

Det kan finnas flera valfria argument i en procedur, som alla är listade i slutet av argumentlistan.

Att skicka argument efter värde och referens

Argument i VBA kan överföras till ett förfarande på två sätt:

  • ByVal – skicka ett argument efter värde. Detta innebär att endast värdet (det vill säga en kopia av argumentet) skickas till proceduren, och därför kommer alla ändringar som görs i argumentet inuti proceduren att gå förlorade när proceduren avslutas.
  • ByRef – skicka ett argument genom hänvisning. Det vill säga, den faktiska adressen för argumentplatsen i minnet skickas till proceduren. Alla ändringar som görs i ett argument i proceduren kommer att sparas när proceduren avslutas.

Använda nyckelord ByVal or ByRef i procedurdeklarationen kan du ange hur argumentet skickas till proceduren. Detta visas i exemplen nedan:

Sub AddToCells(ByVal i As Integer) ... End Sub
I det här fallet heltalsargumentet i passerat av värde. Efter att ha lämnat proceduren Sub alla gjorda med i ändringar kommer att gå förlorade.
Sub AddToCells(ByRef i As Integer) ... End Sub
I det här fallet heltalsargumentet i passerat genom referens. Efter att ha lämnat proceduren Sub alla gjorda med i ändringarna kommer att lagras i variabeln som skickades till proceduren Sub.

Kom ihåg att argument i VBA skickas som referens som standard. Med andra ord, om nyckelord inte används ByVal or ByRef, då skickas argumentet genom referens.

Innan du fortsätter med procedurerna Funktion и Sub mer detaljerat kommer det att vara användbart att ta en ny titt på funktionerna och skillnaderna mellan dessa två typer av procedurer. Följande är korta diskussioner om VBA-procedurer Funktion и Sub och enkla exempel visas.

VBA-procedur «Funktion»

VBA-redigeraren känner igen proceduren Funktion när den stöter på en grupp kommandon inneslutna mellan följande inledande och avslutande uttalanden:

Funktion ... Avsluta funktion

Som nämnts tidigare, förfarandet Funktion i VBA (i motsats till Sub) returnerar ett värde. Följande regler gäller för returvärden:

  • Datatypen för returvärdet måste deklareras i procedurens rubrik Funktion .
  • Variabeln som innehåller returvärdet måste ha samma namn som proceduren Funktion . Denna variabel behöver inte deklareras separat, eftersom den alltid finns som en integrerad del av proceduren. Funktion .

Detta illustreras väl i följande exempel.

VBA-funktionsexempel: Utföra en matematisk operation på 3 siffror

Följande är ett exempel på en VBA-procedurkod Funktion , som tar tre argument av typen Dubbelklicka (flyttal med dubbel precision). Som ett resultat returnerar proceduren ytterligare ett antal typ Dubbelklickalika med summan av de två första argumenten minus det tredje argumentet:

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

Denna mycket enkla VBA-procedur Funktion illustrerar hur data skickas till en procedur genom argument. Du kan se att datatypen som returneras av proceduren definieras som Dubbelklicka (orden säger Som dubbel efter listan med argument). Detta exempel visar också hur resultatet av proceduren Funktion lagras i en variabel med samma namn som procedurens namn.

Kalla VBA-proceduren "Function"

Om ovanstående enkla procedur Funktion infogas i en modul i Visual Basic-redigeraren kan den anropas från andra VBA-procedurer eller användas på ett kalkylblad i en Excel-arbetsbok.

Kalla VBA-proceduren "Function" från en annan procedur

Tillvägagångssätt Funktion kan anropas från en annan VBA-procedur genom att helt enkelt tilldela den proceduren till en variabel. Följande exempel visar ett anrop till en procedur Summinus, som definierades ovan.

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

Anropa VBA-proceduren "Function" från ett kalkylblad

VBA-förfarande Funktion kan anropas från ett Excel-kalkylblad på samma sätt som alla andra inbyggda Excel-funktioner. Därför proceduren som skapades i föregående exempel Funktion - Summinus kan anropas genom att skriva in följande uttryck i en kalkylbladscell:

=SumMinus(10, 5, 2)

VBA-förfarande «Sub»

VBA-redaktören förstår att det finns en procedur framför den Subnär den stöter på en grupp kommandon inneslutna mellan följande inledande och avslutande uttalanden:

Sub ... End Sub

VBA-procedur "Sub": Exempel 1. Centerjustering och teckenstorlek ändras i ett valt cellområde

Betrakta ett exempel på en enkel VBA-procedur Sub, vars uppgift är att ändra formateringen av det valda cellområdet. Cellerna är centrerade (både vertikalt och horisontellt) och teckensnittsstorleken ändras till den användarspecificerade:

Sub Format_Centered_And_Sized(Valfritt iFontSize Som heltal = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

Denna procedur Sub utför åtgärder men returnerar inget resultat.

Det här exemplet använder också ett valfritt argument Textstorlek. Om argumentet Textstorlek inte övergått till förfarandet Sub, då är dess standardvärde 10. Men om argumentet Textstorlek övergått till förfarande Sub, då kommer det valda cellintervallet att ställas in på den teckenstorlek som anges av användaren.

VBA Sub-procedur: Exempel 2: Centrera justering och fetstil i valt cellområde

Följande procedur liknar den som just diskuterades, men den här gången, istället för att ändra storlek, tillämpar den en fet stil på det valda cellområdet. Detta är ett exempel på procedur Sub, som inte tar några argument:

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

Anropa "Sub"-procedur i Excel VBA

Kalla VBA-proceduren "Sub" från en annan procedur

Att anropa en VBA-procedur Sub från en annan VBA-procedur måste du skriva nyckelordet Ring upp, procedurens namn Sub och ytterligare inom parentes finns argumenten för förfarandet. Detta visas i exemplet nedan:

Sub main() Call Format_Centered_And_Sized(20) End Sub

Om proceduren Format_Centered_And_Sized har mer än ett argument måste de separeras med kommatecken. Så här:

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

Anropa VBA-proceduren "Sub" från arbetsbladet

Tillvägagångssätt Sub kan inte matas in direkt i en Excel-arkcell, vilket kan göras med en procedur Funktion eftersom proceduren Sub returnerar inte ett värde. Dock förfaranden Sub, som inte har några argument och deklareras som offentliga (som visas nedan) kommer att vara tillgänglig för användare av kalkylbladet. Således, om de enkla procedurer som diskuterats ovan Sub infogas i en modul i Visual Basic Editor, proceduren Format_Centered_And_Fet kommer att vara tillgänglig för användning i ett Excel-kalkylblad och proceduren Format_Centered_And_Sized – kommer inte att vara tillgänglig eftersom den har argument.

Här är ett enkelt sätt att köra (eller exekvera) en procedur Sub, tillgänglig från arbetsbladet:

  • Presse Alt + F8 (tryck tangent andra och medan du håller den nedtryckt, tryck på knappen F8).
  • I listan över makron som visas väljer du det du vill köra.
  • Presse Körning (springa)

Att utföra en procedur Sub snabbt och enkelt kan du tilldela en kortkommando till den. För detta:

  • Presse Alt + F8.
  • I listan över makron som visas väljer du det du vill tilldela en kortkommando till.
  • Presse parametrar (Alternativ) och ange kortkommandot i dialogrutan som visas.
  • Presse OK och stäng dialogrutan Makro (Makro).

Uppmärksamhet: När du tilldelar ett kortkommando till ett makro, se till att det inte används som standard i Excel (t.ex. Ctrl + C). Om du väljer en redan befintlig kortkommando kommer den att omtilldelas till makrot, och som ett resultat kan användaren starta makrot av misstag.

VBA-förfarandets omfattning

Del 2 av denna handledning diskuterade omfattningen av variabler och konstanter och nyckelordens roll. offentliga и Privat. Dessa nyckelord kan också användas med VBA-procedurer:

Public Sub AddToCells(i As Integer) ... End Sub
Om procedurdeklarationen föregås av nyckelordet offentliga, då kommer proceduren att vara tillgänglig för alla moduler i det VBA-projektet.
Private Sub AddToCells(i As Integer) ... End Sub
Om procedurdeklarationen föregås av nyckelordet Privat, då kommer denna procedur endast att vara tillgänglig för den aktuella modulen. Det kan inte anropas i någon annan modul eller från en Excel-arbetsbok.

Kom ihåg att om innan du deklarerar ett VBA-förfarande Funktion or Sub nyckelordet inte har infogats, är standardegenskapen inställd för proceduren offentliga (det vill säga, det kommer att vara tillgängligt överallt i detta VBA-projekt). Detta till skillnad från variabeldeklarationer, som som standard är det Privat.

Tidig utgång från VBA-procedurerna "Function" och "Sub"

Om du behöver avsluta exekveringen av en VBA-procedur Funktion or Sub, utan att vänta på dess naturliga slut, så finns det operatörer för detta Utgångsfunktion и Exit Sub. Användningen av dessa operatorer visas nedan med en enkel procedur som exempel. Funktion En som förväntar sig att få ett positivt argument för att utföra ytterligare operationer. Om ett icke-positivt värde skickas till proceduren, kan inga ytterligare operationer utföras, så användaren bör visas ett felmeddelande och proceduren bör avslutas omedelbart:

Funktion VAT_Amount(sVAT_Rate As Single) As Single VAT_Amount = 0 If sVAT_Rate <= 0 Then MsgBox "Förväntade ett positivt värde på sVAT_Rate men mottaget " & sVAT_Rate Exit Function End If ... End Function

Observera att innan du slutför proceduren Funktion - Momsbeloppet, en inbyggd VBA-funktion infogas i koden MsgBox, som visar en varningspopup för användaren.

Kommentera uppropet