Die Verwendung von Funktionen in VBA

Glen Alfaro 30 Januar 2023
  1. Verwenden des Funktionstyps non-object in VBA
  2. Verwendung des Funktionstyps object in VBA
  3. Verwendung des Befehls Exit Function für eine erzwungene Rückkehr zum Unterprogramm
Die Verwendung von Funktionen in VBA

In diesem Artikel wird gezeigt, wie Sie eine Funktion erstellen und verwenden, wenn Sie mit VBA arbeiten.

Funktionen werden verwendet, um ein Ergebnis zurückzugeben, wo eine Unterroutine dies nicht kann. Wenn das Programm länger und komplexer wird, sind Funktionen ein nützliches Werkzeug zur einfacheren Organisation von Codeblöcken, zum Debuggen und Überarbeiten des Skripts.

Funktionen können in zwei Untergruppen eingeteilt werden:

non-object-type Funktion, die Zeichenketten, Ganzzahlen, boolesche Werte usw. zurückgibt
object-type Funktion, die Objekte wie Bereiche, Arraylisten usw. zurückgibt.

Syntax:

[Public | Private] [ Static ] Function name [ ( argumentlist ) ] [ As retType ]
[ statements ]
[ name = expression ]
[ Exit Function ]
End Function

Definition:

Public Optional. gibt an, dass andere Prozeduren in allen Modulen auf die Funktion zugreifen können
Private Optional. gibt an, dass auf die Funktion nur durch Prozeduren im aktuellen Modul zugegriffen werden kann
Static Optional. gibt an, dass die Prozedurvariable zwischen Funktionsaufrufen beibehalten wird
name Erforderlich. Name der Funktion
argumentlist Optional. Liste der Variablen, die beim Aufruf der Funktion übergeben werden.
retType Optional. Rückgabetyp der Funktion
statements Codeblock zum Ausführen
expression Rückgabewert der Funktion

Verwenden des Funktionstyps non-object in VBA

Der folgende Codeblock berechnet die Fläche eines Dreiecks anhand seiner Basis und Höhe als Argumente unter Verwendung eines Funktionstyps non-object.

Public Function GetTriangleArea(b, h) as Double
Dim area as Double
area= (b*h)/2
GetTriangleArea= area
End Function
Sub TestFunction()
Debug.print("The area of the triangle is " & GetTriangleArea(10,8) & " square meters.")
End Sub

Ausgabe:

The area of the triangle is 40 square meters.

Verwendung des Funktionstyps object in VBA

Der unten stehende Codeblock zeigt, wie ein Objekt-Funktionstyp verwendet wird, um die Summe aller Zahlen zwischen zwei Zahlen zu berechnen.

Public Function GetCollection(numStr, numEnd) As Object
'Declaring variable for the counter
Dim i As Integer
'Creating a new Arraylist named coll
Dim coll As Object
Set coll = CreateObject("System.Collections.ArrayList")

'Add all number from numStr to numEnd to the arraylist named coll using a for loop
For i = numStr To numEnd
    coll.Add (i)
Next i

'Returning the arraylist named coll to the subroutine
    Set GetCollection = coll
End Function
Sub testFunction()

'Declaring collForSum as an Object
'collForSum object will be the placeholder object where the coll arraylist will be in placed
Dim collForSum As Object
'Setting up a counter named j
Dim j As Integer
'Sum variable will hold the running sum of the elements in collForSum
Dim sum As Double
'Calling the GetCollection Function to fill collForSUm Object
    Set collForSum = GetCollection(10, 20)
'For loop to iterate on all element of collForSum arraylist
For j = 0 To collForSum.Count - 1
    'Add all the elements inside the collForSum arraylist.
    sum = sum + collForSum(j)
Next j
Debug.Print ("The total sum is " & sum & ".")
End Sub

Ausgabe:

The total sum is 165.

Verwendung des Befehls Exit Function für eine erzwungene Rückkehr zum Unterprogramm

Das Zurückgeben eines Werts an eine Subroutine oder eine Funktion bedeutet nicht unbedingt, dass die Codeausführung in der aktuellen Funktion beendet wird. Wir müssen deklarieren, dass die Codeausführung für die Funktion explizit gestoppt werden soll. Der zu verwendende Befehl ist Exit Function.

Der Aufruf einer Funktion ohne den Befehl Exit Function kann falsche Werte zurückgeben.

Public Function PositiveOrNegative(num) as String 
If num >= 0 Then
    PositiveOrNegative = "Positive"
End If
PositiveOrNegative = "Negative"
End Function

Sub TestFunction()
   Debug.Print (PositiveOrNegative(5))   
End Sub

TestFunktion Ausgabe:

Negative

Der Ausgang ist Negativ, obwohl der Eingang TestFunction 5 ist, da die Codeausführung nicht angehalten wurde, als sie die Codezeile PositiveOrNegative = "Positive" erreichte.

Wir müssen den Befehl Exit Function verwenden, um dies zu beheben.

Public Function PositiveOrNegative(num) as String 
If num >= 0 Then
    PositiveOrNegative = "Positive"
    'Exit Function will force the code execution in the current function to stop and return the current value of PositiveOrNegative
    Exit Function
End If
PositiveOrNegative = "Negative"
End Function

Sub TestFunction()
   Debug.Print (PositiveOrNegative(5))   
End Sub

Ausgabe:

Positive

Verwandter Artikel - VBA Function