Excel VBA-subroutine: Sub aanroepen in VBA met voorbeeld

⚡ Slimme samenvatting

Een Excel VBA-subroutine is een codeblok dat een taak uitvoert zonder een waarde terug te geven. Deze pagina behandelt naamgevingsregels, de syntaxis van subroutines, het aanroepen van een subroutine vanuit een opdrachtknop en het verschil tussen een subroutine en een functie.

  • ???? Definitie: Een subroutine voert een specifieke taak uit en retourneert geen waarde aan de code die deze heeft aangeroepen.
  • ♻️ Herbruikbaarheid: Eén subroutine kan vanuit elke plek in het project meerdere keren worden aangeroepen.
  • 🔤 Naamgevingsregels: Een naam mag geen spaties bevatten, moet beginnen met een letter of een underscore en mag nooit een VBA-trefwoord zijn.
  • 🧾 Syntax: `Private Sub name(ByVal arg As String)` opent het blok en `End Sub` sluit het.
  • ️ Roeping: Een klikgebeurtenis op een opdrachtknop roept de subroutine aan en geeft de argumenten door.
  • ▶ ️ Direct uitvoeren: F5, het dialoogvenster Macro's of het trefwoord Aanroepen kunnen allemaal een subroutine uitvoeren zonder dat er een knop nodig is.
  • 🔁 Sub of functie: Kies een functie wanneer een waarde moet worden geretourneerd, anders kiest u een subprocedure.

Excel VBA-subroutine

Wat is een subroutine in VBA?

A Subroutine in VBA is een stukje code dat een specifieke taak uitvoert die in de code wordt beschreven, maar geen resultaat of waarde retourneert. Subroutines worden gebruikt om grote stukken code op te splitsen in kleine, hanteerbare delen. Subroutines kunnen overal in het programma meerdere keren worden opgeroepen.

Stel dat u een gebruikersinterface hebt gemaakt met tekstvakken voor het accepteren van invoergegevens van de gebruiker. U kunt een subroutine maken die de inhoud van de tekstvakken wist. Een VBA Call Subroutine is in zo'n scenario geschikt omdat u geen resultaten wilt retourneren.

Waarom subroutines gebruiken?

  • Breek code op in kleine, beheersbare code: Een gemiddeld computerprogramma heeft duizenden en duizenden broncoderegels. Dit introduceert complexiteit. Subroutines helpen dit probleem op te lossen door het programma op te splitsen in kleine beheersbare stukken code.
  • Code herbruikbaarheid. Stel dat u een programma hebt dat toegang nodig heeft tot de database, dan moeten bijna alle vensters in het programma met de database communiceren. In plaats van aparte code te schrijven voor deze vensters, kunt u een functie maken die alle database-interacties afhandelt. U kunt deze functie vervolgens vanuit elk gewenst venster aanroepen.
  • Subroutines en functies zijn zelfdocumenterend. Stel dat u een functie 'calculLoanInterest' heeft en een andere functie 'connectToDatabase'. Door alleen maar naar de naam van de subroutine/functie te kijken, kan de programmeur zien wat het programma doet.

Voordat een naam wordt geschreven, verwacht de compiler dat deze aan een korte reeks regels voldoet.

Regels voor het benoemen van subroutines en functies

Om subroutines en functies te gebruiken, zijn er een aantal regels die men moet volgen.

  • Een subroutine of VBA-aanroepfunctienaam mag geen spatie bevatten
  • Een Excel VBA Call Sub- of functienaam moet beginnen met een letter of een onderstrepingsteken. Het mag niet beginnen met een cijfer of een speciaal teken
  • Een subroutine- of functienaam kan geen trefwoord zijn. Een trefwoord is een woord dat een speciale betekenis heeft VBA. Woorden als Private, Sub, Function en End, enz. zijn allemaal voorbeelden van trefwoorden. De compiler gebruikt ze voor specifieke taken.

Als er een geldige naam is gekozen, volgt de declaratie zelf een vast patroon.

VBA-subroutinesyntaxis

U moet het tabblad Ontwikkelaars in Excel inschakelen om dit voorbeeld te kunnen volgen. Als u niet weet hoe u het tabblad Ontwikkelaars moet inschakelen, lees dan de tutorial op VBA-besturingselementen in Excel

HIER in de syntaxis,

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

Syntaxis uitleg

Code Actie
  • “Privé Sub mijnSubRoutine(…)”
  • Hier wordt het trefwoord “Sub” gebruikt om een ​​subroutine met de naam “mySubRoutine” te declareren en de hoofdtekst van de subroutine te starten.
  • Het trefwoord Private wordt gebruikt om de reikwijdte van de subroutine te specificeren
  • “ByVal arg1 als tekenreeks, ByVal arg2 als tekenreeks”:
  • Het declareert twee parameters van het string-gegevenstype, namelijk arg1 en arg2
  • “Einde sub”
  • “End Sub” wordt gebruikt om de hoofdtekst van de subroutine te beëindigen

De volgende subroutine accepteert de voor- en achternaam en geeft deze weer in een berichtvenster.

Nu gaan we deze subprocedure programmeren en uitvoeren. Laat dit eens zien.

Sub bellen in VBA

Hieronder vindt u een stapsgewijs proces voor het aanroepen van Sub in VBA:

  1. Ontwerp de gebruikersinterface en stel de eigenschappen in voor de gebruikersbedieningen.
  2. Voeg de subroutine toe
  3. Schrijf de klikgebeurteniscode voor de opdrachtknop die de subroutine aanroept
  4. Test de applicatie

Stap 1) User Interface

Ontwerp de gebruikersinterface zoals weergegeven in de onderstaande afbeelding.

Sub bellen in VBA

Stel de volgende eigenschappen in. De eigenschappen die we instellen:

S / N Controleer: Eigendom Waarde
1 CommandoKnop1 Naam btnDisplayFullName
2 Onderschrift Volledige naam subroutine

Uw interface zou er nu als volgt uit moeten zien.

Sub bellen in VBA

Stap 2) Subroutine toevoegen

  1. Druk op Alt + F11 om het codevenster te openen
  2. Voeg de volgende subroutine toe
Private Sub displayFullName(ByVal firstName As String, ByVal lastName As String)
    MsgBox firstName & " " & lastName
End Sub

HIER in de code,

Code Acties
  • “Privé-subdisplayFullName(…)”
  • Hiermee wordt een privé-subroutine displayFullName gedeclareerd die twee tekenreeksparameters accepteert.
  • “ByVal voornaam als tekenreeks, ByVal achternaam als tekenreeks”
  • Het declareert twee parametervariabelen: firstName en lastName
  • MsgBox voornaam Achternaam"
  • Het noemt de MsgBox ingebouwde functie om een ​​berichtenvenster weer te geven. Vervolgens worden de variabelen 'firstName' en 'lastName' als parameters doorgegeven.
  • Het ampersand “&” wordt gebruikt om de twee variabelen samen te voegen en een lege ruimte ertussen toe te voegen.

Stap 3) De subroutine oproepen

De subroutine aanroepen via de klikgebeurtenis van de opdrachtknop.

  • Klik met de rechtermuisknop op de opdrachtknop, zoals weergegeven in de onderstaande afbeelding. Selecteer 'Weergave'. Code.
  • De code-editor wordt geopend

Sub bellen in VBA

Voeg de volgende code toe aan de code-editor voor de klikgebeurtenis van de opdrachtknop btnDisplayFullName.

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

Uw codevenster zou er nu als volgt uit moeten zien

Sub bellen in VBA

Sla de wijzigingen op en sluit het codevenster.

Stap 4) Het testen van de code

Zet op de ontwikkelaarswerkbalk de ontwerpmodus op 'uit'. Zoals hieronder weergegeven.

Sub bellen in VBA

Stap 5) Klik op de opdrachtknop 'FullName Subroutine'.

U krijgt de volgende resultaten

Sub bellen in VBA

Download het bovenstaande Excel-bestand. Code

Een knop is handig, maar het is niet de enige manier om een ​​subroutine te starten, en tijdens de ontwikkeling is het zelden de snelste.

Hoe voer je een subroutine uit zonder een knop te gebruiken?

Terwijl je nog bezig bent met het schrijven van code, is het toevoegen van een besturingselement aan het werkblad om een ​​subroutine te testen tijdverspilling. VBA biedt vier andere manieren om een ​​subroutine uit te voeren, en elk is geschikt voor een ander moment in de ontwikkelingscyclus.

  • Druk op F5 in de editor: Plaats de cursor ergens in de Sub en druk op F5. De Sub wordt direct uitgevoerd. Dit werkt alleen als de Sub geen argumenten accepteert, omdat VBA geen waarden hoeft door te geven.
  • Doorloop de stappen met F8: Dezelfde code wordt regel voor regel uitgevoerd, zodat je in het venster 'Lokale waarden' elke variabele kunt zien veranderen. Gebruik dit wanneer een resultaat onjuist is en je wilt weten waar dat precies zit.
  • Gebruik het dialoogvenster Macro's: Klik op het tabblad Ontwikkelaar op Macro's, kies de naam en klik op Uitvoeren. Alleen openbare subroutines zonder argumenten worden in deze lijst weergegeven, daarom wordt een hulpsubroutine meestal als privé gedeclareerd.
  • Roep het aan vanuit een andere sub: Dit is de methode die wordt gebruikt voor elke Sub die argumenten accepteert, en waarop de bovenstaande opdrachtknop is gebaseerd.

De laatste optie kent twee geaccepteerde vormen. Het schrijven van de naam gevolgd door de kale argumenten werkt, evenals het expliciete gebruik van het trefwoord Call, maar de regel voor de haakjes verschilt tussen beide.

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

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

Beide regels doen precies hetzelfde. Het combineren van de twee vormen, door haakjes te gebruiken zonder het trefwoord `Call`, is de meest voorkomende oorzaak van de compileerfout "Expected: =" wanneer een `Sub` meer dan één argument accepteert.

Verschil tussen een subroutine en een functie in VBA

Sub en Function zijn de twee proceduretypen in VBA, en beginners kiezen vaak de verkeerde. De doorslaggevende vraag is eenvoudig: heeft de aanroepende code een waarde nodig als retourwaarde?

Kenmerk Sub Functie
Retourneert een waarde Nee Ja, toegewezen aan de functienaam
Verklaard met Sub ... Einde Sub Functie … Einde functie
genoemd als Een statement op zich. Een deel van een expressie, bijvoorbeeld x = myFunc(2)
Bruikbaar in een werkbladcel Nee Ja, als een door de gebruiker gedefinieerde functie.
Typisch gebruik Een werkblad opmaken, invoer wissen, een bericht weergeven Een totaal berekenen, een waarde omrekenen, gegevens opzoeken

Gebruik een Sub wanneer de code op het werkblad wordt uitgevoerd, en een VBA-functie wanneer de code een antwoord produceert dat door iets anders wordt gebruikt.

Veelgestelde vragen

Een private sub kan alleen worden aangeroepen vanuit de module waarin deze is gedeclareerd. Een public sub is zichtbaar voor elke module in het project en is het enige type dat in het dialoogvenster Macro's verschijnt.

Bij `ByVal` wordt een kopie doorgegeven, waardoor de subroutine de variabele van de aanroeper niet kan wijzigen. Bij `ByRef` wordt de variabele zelf doorgegeven, waardoor elke wijziging zichtbaar is voor de aanroeper. `ByRef` is de standaardmethode wanneer geen van beide trefwoorden is gebruikt.

Gebruik de `Exit Sub`-instructie. Deze stopt de procedure op dat punt en geeft de controle terug aan de aanroeper, wat handig is om vroegtijdig te stoppen wanneer een validatietest mislukt.

Ja. Plak de macro en een AI-assistent groepeert gerelateerde regels, stelt een beschrijvende naam voor elke nieuwe sub voor en herschrijft het origineel als een korte reeks aanroepen. Test het resultaat op een kopie van het werkblad.

Ja. Geef de foutmelding en de aanroepregel op, en een AI-assistent identificeert oorzaken zoals haakjes die zonder het trefwoord 'Call' worden gebruikt, een onjuist aantal argumenten of een niet-overeenkomend gegevenstype, en geeft vervolgens de gecorrigeerde regel weer.

Vat dit bericht samen met: