Excel VBA-Unterroutine: So rufen Sie Sub in VBA anhand eines Beispiels auf

⚡ Intelligente Zusammenfassung

Eine Excel-VBA-Subroutine ist ein Codeblock, der eine Aufgabe ausführt, ohne einen Wert zurückzugeben. Diese Seite behandelt Namensregeln, die Sub-Syntax, den Aufruf einer Subroutine über eine Befehlsschaltfläche und die Unterschiede zwischen einer Subroutine und einer Funktion.

  • 📦 Definition: Eine Unterroutine führt eine bestimmte Aufgabe aus und gibt keinen Wert an den aufrufenden Code zurück.
  • ♻️ Wiederverwendbarkeit: Eine Unterroutine kann von überall im Projekt beliebig oft aufgerufen werden.
  • 🔤 Benennungsregeln: Ein Name darf keine Leerzeichen enthalten, muss mit einem Buchstaben oder Unterstrich beginnen und darf niemals ein VBA-Schlüsselwort sein.
  • 🧾 Syntax: Private Sub name(ByVal arg As String) öffnet den Block und End Sub schließt ihn.
  • 🖱️ Berufung: Das Click-Ereignis einer Befehlsschaltfläche ruft die Subroutine auf und übergibt ihre Argumente.
  • ▶ ️ Direkt ausführen: F5, der Makro-Dialog oder das Schlüsselwort Call führen alle eine Subroutine ohne Schaltfläche aus.
  • 🔁 Unter- oder Funktion: Wählen Sie eine Funktion, wenn ein Wert zurückgegeben werden muss, andernfalls wählen Sie eine Unterroutine.

Excel VBA-Unterroutine

Was ist eine Unterroutine in VBA?

A Unterprogramm in VBA ist ein Codeteil, der eine bestimmte, im Code beschriebene Aufgabe ausführt, aber kein Ergebnis oder Wert zurückgibt. Unterprogramme werden verwendet, um große Codeteile in kleine, überschaubare Teile zu zerlegen. Unterprogramme können von überall im Programm mehrmals aufgerufen werden.

Angenommen, Sie haben eine Benutzeroberfläche mit Textfeldern zum Akzeptieren von Benutzereingabedaten erstellt. Sie können eine Subroutine erstellen, die den Inhalt der Textfelder löscht. Eine VBA-Aufrufsubroutine ist in einem solchen Szenario geeignet, da Sie keine Ergebnisse zurückgeben möchten.

Warum Unterprogramme verwenden?

  • Teilen Sie den Code in kleinen, überschaubaren Code auf: Ein durchschnittliches Computerprogramm hat Tausende und Abertausende von Quellcodezeilen. Dies führt zu Komplexität. Unterprogramme helfen, dieses Problem zu lösen, indem sie das Programm in kleine, überschaubare Codeblöcke aufteilen.
  • Code Wiederverwendbarkeit. Angenommen, Sie haben ein Programm, das auf die Datenbank zugreifen muss. Fast alle Fenster im Programm müssen mit der Datenbank interagieren. Anstatt separaten Code für diese Fenster zu schreiben, können Sie eine Funktion erstellen, die alle Datenbankinteraktionen verarbeitet. Sie können diese dann von jedem beliebigen Fenster aus aufrufen.
  • Unterprogramme und Funktionen sind selbstdokumentierend. Nehmen wir an, Sie haben eine Funktion berechneLoanInterest und eine andere mit der Aufschrift connectToDatabase. Anhand des Namens der Unterroutine/Funktion kann der Programmierer erkennen, was das Programm tut.

Bevor ein Name geschrieben wird, erwartet der Compiler, dass dieser einigen wenigen Regeln entspricht.

Regeln für die Benennung von Unterprogrammen und Funktionen

Um Unterprogramme und Funktionen verwenden zu können, müssen bestimmte Regeln befolgt werden.

  • Der Name einer Unterroutine oder einer VBA-Aufruffunktion darf kein Leerzeichen enthalten
  • Ein Excel VBA Call Sub oder Funktionsname sollte mit einem Buchstaben oder einem Unterstrich beginnen. Es darf nicht mit einer Zahl oder einem Sonderzeichen beginnen
  • Ein Unterprogramm- oder Funktionsname darf kein Schlüsselwort sein. Ein Schlüsselwort ist ein Wort, das eine besondere Bedeutung hat VBA. Wörter wie „Private“, „Sub“, „Function“ und „End“ usw. sind Beispiele für Schlüsselwörter. Der Compiler verwendet sie für bestimmte Aufgaben.

Bei Wahl eines gültigen Namens folgt die Deklaration selbst einem festen Muster.

Syntax der VBA-Unterroutine

Sie müssen die Registerkarte „Entwickler“ in Excel aktivieren, um diesem Beispiel folgen zu können. Wenn Sie nicht wissen, wie Sie die Registerkarte „Entwickler“ aktivieren, lesen Sie das Tutorial weiter VBA-Steuerelemente in Excel

HIER in der Syntax,

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

Syntaxerklärung

Code Action
  • „Private Sub mySubRoutine(…)“
  • Hier wird das Schlüsselwort „Sub“ verwendet, um eine Unterroutine mit dem Namen „mySubRoutine“ zu deklarieren und den Hauptteil der Unterroutine zu starten.
  • Das Schlüsselwort Private wird verwendet, um den Umfang der Unterroutine anzugeben
  • „ByVal arg1 als String, ByVal arg2 als String“:
  • Es deklariert zwei Parameter vom String-Datentyp mit den Namen arg1 und arg2
  • "End Sub"
  • „End Sub“ wird verwendet, um den Hauptteil der Unterroutine zu beenden

Die folgende Subroutine akzeptiert den Vor- und Nachnamen und zeigt diese in einem Meldungsfeld an.

Jetzt werden wir diese Unterprozedur programmieren und ausführen. Sehen wir uns das an.

So rufen Sie Sub in VBA auf

Nachfolgend finden Sie eine Schritt-für-Schritt-Anleitung zum Aufrufen von Sub in VBA:

  1. Entwerfen Sie die Benutzeroberfläche und legen Sie die Eigenschaften für die Benutzersteuerelemente fest.
  2. Fügen Sie die Unterroutine hinzu
  3. Schreiben Sie den Klickereigniscode für die Befehlsschaltfläche, die die Unterroutine aufruft
  4. Testen Sie die Anwendung

Schritt 1) Benutzerschnittstelle

Gestalten Sie die Benutzeroberfläche wie im Bild unten gezeigt.

So rufen Sie Sub in VBA auf

Legen Sie die folgenden Eigenschaften fest. Die Eigenschaften, die wir festlegen:

S / N Kontrolle Eigenschaft Wert
1 Befehlsschaltfläche1 Name btnDisplayFullName
2 Bildunterschrift Unterprogramm mit vollständigem Namen

Ihre Oberfläche sollte nun wie folgt aussehen.

So rufen Sie Sub in VBA auf

Schritt 2) Unterprogramm hinzufügen

  1. Drücken Sie Alt + F11, um das Codefenster zu öffnen
  2. Fügen Sie die folgende Subroutine hinzu
Private Sub displayFullName(ByVal firstName As String, ByVal lastName As String)
    MsgBox firstName & " " & lastName
End Sub

HIER im Code,

Code Aktion
  • „Private Sub displayFullName(…)“
  • Es deklariert eine private Subroutine displayFullName, die zwei String-Parameter akzeptiert.
  • „ByVal Vorname als String, ByVal Nachname als String“
  • Es deklariert zwei Parametervariablen firstName und lastName
  • MsgBox Vorname Nachname"
  • Es nennt die MsgBox integrierte Funktion zum Anzeigen eines Meldungsfelds. Anschließend werden die Variablen „Vorname“ und „Nachname“ als Parameter übergeben.
  • Das kaufmännische Und-Zeichen „&“ wird verwendet, um die beiden Variablen zu verketten und ein Leerzeichen dazwischen einzufügen.

Schritt 3) Aufruf des Unterprogramms

Aufrufen der Unterroutine über das Klickereignis der Befehlsschaltfläche.

  • Klicken Sie mit der rechten Maustaste auf die Befehlsschaltfläche (siehe Abbildung unten). Wählen Sie „Ansicht“. Code.
  • Der Code-Editor wird geöffnet

So rufen Sie Sub in VBA auf

Fügen Sie im Code-Editor den folgenden Code für das Klickereignis der Befehlsschaltfläche „btnDisplayFullName“ hinzu.

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

Ihr Codefenster sollte nun wie folgt aussehen

So rufen Sie Sub in VBA auf

Speichern Sie die Änderungen und schließen Sie das Codefenster.

Schritt 4) Testen des Codes

Deaktivieren Sie in der Entwicklersymbolleiste den Designmodus. Wie nachfolgend dargestellt.

So rufen Sie Sub in VBA auf

Schritt 5) Klicken Sie auf die Befehlsschaltfläche „FullName Subroutine“.

Sie erhalten folgende Ergebnisse

So rufen Sie Sub in VBA auf

Laden Sie die obige Excel-Datei herunter. Code

Ein Knopf ist zwar praktisch, aber nicht die einzige Möglichkeit, eine Subroutine zu starten, und während der Entwicklung ist er selten die schnellste.

Wie man eine Unterroutine ohne Knopf ausführt

Während Sie noch Code schreiben, ist das Hinzufügen eines Steuerelements zum Tabellenblatt nur zum Testen einer Subroutine Zeitverschwendung. VBA bietet vier weitere Möglichkeiten, eine Subroutine auszuführen, und jede eignet sich für einen anderen Zeitpunkt im Entwicklungszyklus.

  • Drücken Sie F5 im Editor: Setzen Sie den Cursor an eine beliebige Stelle innerhalb der Subroutine und drücken Sie F5. Die Routine wird sofort ausgeführt. Dies funktioniert nur, wenn die Subroutine keine Argumente benötigt, da VBA in diesem Fall keine Werte übergeben kann.
  • Mit F8 durchgehen: Führen Sie den gleichen Durchlauf zeilenweise durch, sodass Sie die Änderungen jeder Variablen im Fenster „Lokale Variablen“ beobachten können. Verwenden Sie diese Funktion, wenn ein Ergebnis fehlerhaft ist und Sie die Fehlerursache ermitteln müssen.
  • Verwenden Sie den Dialog „Makros“: Klicken Sie auf der Registerkarte „Entwicklertools“ auf „Makros“, wählen Sie den Namen aus und klicken Sie auf „Ausführen“. In dieser Liste werden nur öffentliche Prozeduren ohne Argumente angezeigt. Daher wird eine Hilfsprozedur üblicherweise als privat deklariert.
  • Ruf es aus einem anderen Subreddit an: Dies ist die Methode, die für jede Subroutine verwendet wird, die Argumente entgegennimmt, und auf die sich auch die obige Schaltfläche stützt.

Die letzte Option hat zwei zulässige Formen. Die Angabe des Namens gefolgt von den Argumenten ohne Argumente funktioniert, ebenso wie das explizite Schlüsselwort „Call“, jedoch unterscheidet sich die Klammerregel zwischen den beiden Varianten.

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 Zeilen bewirken exakt dasselbe. Die häufigste Ursache für den Kompilierfehler „Expected: =“, wenn eine Sub mehr als ein Argument erwartet, ist die Vermischung der beiden Formen durch das Schreiben von Klammern ohne das Schlüsselwort Call.

Unterschied zwischen einer Subroutine und einer Funktion in VBA

Sub und Function sind die beiden Prozedurtypen in VBA, und Anfänger wählen oft den falschen. Die entscheidende Frage ist einfach: Benötigt der aufrufende Code einen Rückgabewert?

Funktion Sub Funktion
Gibt einen Wert zurück Nein Ja, dem Funktionsnamen zugewiesen.
Erklärt mit Sub … Ende Sub Funktion … Ende der Funktion
Genannt als Eine Aussage in eigener Sache Teil eines Ausdrucks, zum Beispiel x = myFunc(2)
In einer Tabellenzelle verwendbar Nein Ja, als benutzerdefinierte Funktion
Typische Verwendung Formatieren Sie ein Tabellenblatt, löschen Sie Eingabefelder, zeigen Sie eine Meldung an Berechnen Sie eine Summe, wandeln Sie einen Wert um, suchen Sie Daten nach

Verwenden Sie eine Subroutine, wenn der Code auf die Arbeitsmappe angewendet wird, und eine VBA-Funktion wenn der Code eine Antwort erzeugt, die von etwas anderem verarbeitet wird.

Häufig gestellte Fragen

Eine private Subroutine kann nur innerhalb des Moduls aufgerufen werden, das sie deklariert. Eine öffentliche Subroutine ist für jedes Modul im Projekt sichtbar und wird als einzige im Makro-Dialog angezeigt.

`ByVal` übergibt eine Kopie, sodass die Subroutine die Variable des Aufrufers nicht verändern kann. `ByRef` übergibt die Variable selbst, sodass jede Änderung für den Aufrufer sichtbar ist. `ByRef` ist die Standardeinstellung, wenn keines der beiden Schlüsselwörter angegeben ist.

Verwenden Sie die Exit Sub-Anweisung. Sie beendet die Prozedur an dieser Stelle und gibt die Kontrolle an den Aufrufer zurück, was nützlich ist, um die Prozedur frühzeitig zu beenden, wenn ein Validierungstest fehlschlägt.

Ja. Fügen Sie das Makro ein, und ein KI-Assistent gruppiert zusammengehörige Zeilen, schlägt für jede neue Subroutine einen aussagekräftigen Namen vor und schreibt das Original in eine kurze Abfolge von Funktionsaufrufen um. Testen Sie das Ergebnis mit einer Kopie der Arbeitsmappe.

Ja. Geben Sie den Fehlertext und die aufrufende Zeile an, und ein KI-Assistent identifiziert Ursachen wie beispielsweise Klammern, die ohne das Schlüsselwort Call verwendet wurden, eine falsche Anzahl von Argumenten oder einen nicht übereinstimmenden Datentyp und liefert dann die korrigierte Zeile.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: