Excel VBA Subroutine: Hur man ringer Sub i VBA med exempel

โšก Smart sammanfattning

Excel VBA-subrutin grupperar ett kodblock som utfรถr en uppgift utan att returnera ett vรคrde. Den hรคr sidan behandlar namngivningsregler, subsyntax, anrop av en sub frรฅn en kommandoknapp och hur en sub skiljer sig frรฅn en funktion.

  • ๐Ÿ“ฆ Definition: En subrutin utfรถr en specifik uppgift och returnerar inget vรคrde till koden som anropade den.
  • โ™ป๏ธ ร…teranvรคndbarhet: En subrutin kan anropas mรฅnga gรฅnger var som helst i projektet.
  • ๐Ÿ”ค Namnregler: Ett namn innehรฅller inga mellanslag, bรถrjar med en bokstav eller ett understreck och รคr aldrig ett VBA-nyckelord.
  • ๐Ÿงพ Syntax: Private Sub name(ByVal arg As String) รถppnar blocket och End Sub stรคnger det.
  • ๐Ÿ–ฑ๏ธ Kallelse: En kommandoknappshรคndelse, Click, anropar subrutinen och skickar dess argument.
  • โ–ถ ๏ธ Kรถrs direkt: F5, dialogrutan Makron eller nyckelordet Anrop kรถr alla en subrutin utan en knapp.
  • ๐Ÿ” Underfunktion eller funktion: Vรคlj en funktion nรคr ett vรคrde mรฅste returneras, annars vรคlj en delvรคrde.

Excel VBA-subrutin

Vad รคr en subrutin i VBA?

A Subrutin i VBA รคr en kodbit som utfรถr en specifik uppgift som beskrivs i koden men som inte returnerar ett resultat eller ett vรคrde. Subrutiner anvรคnds fรถr att bryta ner stora bitar av kod i smรฅ hanterbara delar. Subrutiner kan รฅterkallas flera gรฅnger frรฅn var som helst i programmet.

Lรฅt oss sรคga att du har skapat ett anvรคndargrรคnssnitt med textrutor fรถr att acceptera anvรคndarindata. Du kan skapa en subrutin som rensar innehรฅllet i textrutorna. En subrutin fรถr VBA-samtal รคr lรคmplig i ett sรฅdant scenario eftersom du inte vill returnera nรฅgra resultat.

Varfรถr anvรคnda subrutiner

  • Bryt upp kod i liten hanterbar kod: Ett genomsnittligt datorprogram har tusentals och รฅter tusentals kรคllkodsrader. Detta introducerar komplexitet. Subrutiner hjรคlper till att lรถsa detta problem genom att dela upp programmet i smรฅ hanterbara bitar av kod.
  • Code รฅteranvรคndbarhet. Lรฅt oss sรคga att du har ett program som behรถver komma รฅt databasen, nรคstan alla fรถnster i programmet kommer att behรถva interagera med databasen. Istรคllet fรถr att skriva separat kod fรถr dessa fรถnster kan du skapa en funktion som hanterar alla databasinteraktioner. Du kan sedan anropa det frรฅn vilket fรถnster du vill.
  • Subrutiner och funktioner รคr sjรคlvdokumenterande. Lรฅt oss sรคga att du har en funktion calculateLoanInterest och en annan som sรคger connectToDatabase. Genom att bara titta pรฅ namnet pรฅ subrutinen/funktionen kommer programmeraren att kunna berรคtta vad programmet gรถr.

Innan kompilatorn skriver en fรถrvรคntar sig namnet att fรถlja en kort uppsรคttning regler.

Regler fรถr namngivning av subrutiner och funktioner

Fรถr att anvรคnda subrutiner och funktioner finns det regler som man mรฅste fรถlja.

  • Namnet pรฅ en subrutin eller VBA-anropsfunktion kan inte innehรฅlla mellanslag
  • Ett Excel VBA Call Sub- eller funktionsnamn ska bรถrja med en bokstav eller ett understreck. Det kan inte bรถrja med ett nummer eller ett specialtecken
  • En subrutin eller funktionsnamn kan inte vara ett nyckelord. Ett nyckelord รคr ett ord som har speciell betydelse i VBA. Ord som Privat, Sub, Funktion och Slut, etc. รคr alla exempel pรฅ nyckelord. Kompilatorn anvรคnder dem fรถr specifika uppgifter.

Med ett giltigt namn valt fรถljer sjรคlva deklarationen ett fast mรถnster.

VBA-subrutinsyntax

Du mรฅste aktivera fliken Utvecklare i Excel fรถr att fรถlja detta exempel. Om du inte vet hur du aktiverar fliken Utvecklare lรคs sedan handledningen pรฅ VBA-kontroller i Excel

Hร„R i syntaxen,

Private Sub mySubRoutine(ByVal arg1 As String, ByVal arg2 As String)
    'do something
End Sub

Syntaxfรถrklaring

Code Handling
  • "Privat Sub mySubRoutine(...)"
  • Hรคr anvรคnds nyckelordet "Sub" fรถr att deklarera en subrutin som heter "mySubRoutine" och starta subrutinen.
  • Nyckelordet Privat anvรคnds fรถr att ange subrutinens omfattning
  • "ByVal arg1 As String, ByVal arg2 As String" :
  • Den deklarerar tvรฅ parametrar fรถr strรคngdatatypnamn arg1 och arg2
  • "End Sub"
  • "End Sub" anvรคnds fรถr att avsluta subrutinen

Fรถljande subrutin accepterar fรถr- och efternamnet och visar dem i en meddelanderuta.

Nu ska vi programmera och kรถra denna underprocedur. Lรฅt se det hรคr.

Hur man ringer Sub i VBA

Nedan fรถljer en steg-fรถr-steg-process om hur man ringer sub i VBA:

  1. Designa anvรคndargrรคnssnittet och stรคll in egenskaperna fรถr anvรคndarkontrollerna.
  2. Lรคgg till subrutinen
  3. Skriv klickhรคndelsekoden fรถr kommandoknappen som anropar subrutinen
  4. Testa applikationen

Steg 1) Anvรคndargrรคnssnitt

Designa anvรคndargrรคnssnittet enligt bilden nedan.

Hur man ringer Sub i VBA

Stรคll in fรถljande egenskaper. Egenskaperna som vi stรคller in:

S / N kontroll Fast egendom Vรคrderar
1 Kommandoknapp1 Namn btnDisplayFullnamn
2 Bildtext Subrutin fรถr fullstรคndigt namn

Ditt grรคnssnitt bรถr nu se ut som fรถljer.

Hur man ringer Sub i VBA

Steg 2) Lรคgg till subrutin

  1. Tryck pรฅ Alt + F11 fรถr att รถppna kodfรถnstret
  2. Lรคgg till fรถljande subrutin
Private Sub displayFullName(ByVal firstName As String, ByVal lastName As String)
    MsgBox firstName & " " & lastName
End Sub

Hร„R i koden,

Code Actions
  • "Privat Sub displayFullName(...)"
  • Den deklarerar en privat subrutin displayFullName som accepterar tvรฅ strรคngparametrar.
  • "ByVal fรถrnamn som strรคng, ByVal efternamn som strรคng"
  • Den deklarerar tvรฅ parametervariabler firstName och lastName
  • MsgBox fรถrnamn Efternamn"
  • Det kallar MsgBox inbyggd funktion fรถr att visa en meddelanderuta. Den skickar sedan variablerna 'firstName' och 'lastName' som parametrar.
  • Et-tecken "&" anvรคnds fรถr att sammanfoga de tvรฅ variablerna och lรคgga till ett tomt mellanslag mellan dem.

Steg 3) Ringer subrutinen

Anropar subrutinen frรฅn kommandoknappens klickhรคndelse.

  • Hรถgerklicka pรฅ kommandoknappen som visas pรฅ bilden nedan. Vรคlj Visa Code.
  • Kodeditorn รถppnas

Hur man ringer Sub i VBA

Lรคgg till fรถljande kod i kodredigeraren fรถr klickhรคndelsen fรถr kommandoknappen btnDisplayFullName.

Private Sub btnDisplayFullName_Click()
    displayFullName "John", "Doe"
End Sub

Ditt kodfรถnster ska nu se ut som fรถljer

Hur man ringer Sub i VBA

Spara รคndringarna och stรคng kodfรถnstret.

Steg 4) Testar koden

Stรคng av designlรคget i verktygsfรคltet fรถr utvecklare. Enligt nedanstรฅende.

Hur man ringer Sub i VBA

Steg 5) Klicka pรฅ kommandoknappen 'FullName Subroutine'.

Du kommer att fรฅ fรถljande resultat

Hur man ringer Sub i VBA

Ladda ner ovanstรฅende Excel-fil Code

En knapp รคr praktiskt, men det รคr inte det enda sรคttet att starta en subrutin, och under utveckling รคr det sรคllan det snabbaste.

Hur man kรถr en subrutin utan en knapp

Medan du fortfarande skriver kod slรถsar du tid genom att lรคgga till en kontroll i arket bara fรถr att testa en subrutin. VBA erbjuder fyra andra sรคtt att kรถra en, och vart och ett passar en annan tidpunkt i utvecklingscykeln.

  • Tryck F5 i redigeraren: Placera markรถren var som helst i Sub-fรคltet och tryck pรฅ F5. Det kรถrs omedelbart. Detta fungerar bara nรคr Sub-fรคltet inte tar emot nรฅgra argument, eftersom VBA inte har nรฅgra vรคrden att ange.
  • Stega igenom med F8: Samma kรถrning, en rad i taget, sรฅ att du kan se varje variabel รคndras i Locals-fรถnstret. Anvรคnd den nรคr ett resultat รคr fel och du behรถver se var.
  • Anvรคnd dialogrutan Makron: Pรฅ fliken Utvecklare klickar du pรฅ Makron, vรคljer namnet och klickar pรฅ Kรถr. Endast offentliga sub utan argument visas i den hรคr listan, vilket รคr anledningen till att en hjรคlpsub vanligtvis deklareras som privat.
  • Anropa det frรฅn en annan Sub: Detta รคr metoden som anvรคnds fรถr alla Sub-kommandon som tar argument, och den som kommandoknappen ovan fรถrlitar sig pรฅ.

Det sista alternativet har tvรฅ accepterade former. Att skriva namnet fรถljt av bara argument fungerar, och detsamma gรคller fรถr det explicita nyckelordet Call, men hakparentesregeln skiljer sig mellan dem.

Sub RunTheGreeting()
    ' Form 1: no Call keyword, no brackets
    displayFullName "John", "Doe"

    ' Form 2: Call keyword, brackets required
    Call displayFullName("Jane", "Roe")
End Sub

Bรฅda raderna gรถr exakt samma sak. Att blanda de tvรฅ formerna, genom att skriva parenteser utan nyckelordet Call, รคr den enskilt vanligaste orsaken till kompileringsfelet "Expected: =" nรคr en Sub tar mer รคn ett argument.

Skillnaden mellan en subfunktion och en funktion i VBA

Sub och Function รคr de tvรฅ procedurtyperna i VBA, och nybรถrjare vรคljer ofta fel. Den avgรถrande frรฅgan รคr enkel: behรถver den anropande koden ett vรคrde tillbaka?

Leverans Sub Funktion
Returnerar ett vรคrde Nej Ja, tilldelad funktionsnamnet
Deklarerad med Sub โ€ฆ End Sub Funktion โ€ฆ Slutfunktion
Kallas som Ett uttalande pรฅ en egen rad Del av ett uttryck, till exempel x = myFunc(2)
Kan anvรคndas i en cell i kalkylbladet Nej Ja, som en anvรคndardefinierad funktion
Typisk anvรคndning Formatera ett ark, rensa inmatningar, visa ett meddelande Berรคkna en totalsumma, konvertera ett vรคrde, slรฅ upp data

Anvรคnd en Sub nรคr koden pรฅverkar arbetsboken, och en VBA-funktion nรคr koden producerar ett svar som nรฅgot annat konsumerar.

Vanliga frรฅgor

En privat sub kan bara anropas inifrรฅn modulen som deklarerar den. En offentlig sub รคr synlig fรถr varje modul i projektet och รคr den enda typen som visas i dialogrutan Makron.

ByVal skickar en kopia, sรฅ subrutinen kan inte รคndra anroparens variabel. ByRef skickar sjรคlva variabeln, sรฅ alla รคndringar รคr synliga fรถr anroparen. ByRef รคr standardvรคrdet nรคr inget av nyckelorden รคr skrivet.

Anvรคnd kommandot Exit Sub. Det stoppar proceduren vid den tidpunkten och รฅterfรถr kontrollen till det som anropade den, vilket รคr anvรคndbart fรถr att avsluta tidigt nรคr ett valideringstest misslyckas.

Ja. Klistra in makrot sรฅ grupperar en AI-assistent relaterade rader, fรถreslรฅr ett beskrivande namn fรถr varje ny del och skriver om originalet som en kort sekvens av anrop. Testa resultatet pรฅ en kopia av arbetsboken.

Ja. Ange feltexten och den anropande raden, sรฅ identifierar en AI-assistent orsaker som hakparenteser som anvรคnds utan nyckelordet Call, felaktigt antal argument eller en felaktig datatyp och tillhandahรฅller sedan den korrigerade raden.

Sammanfatta detta inlรคgg med: