Die Verwendung von Funktionen in VBA
-
Verwenden des Funktionstyps
non-object
in VBA -
Verwendung des Funktionstyps
object
in VBA -
Verwendung des Befehls
Exit Function
für eine erzwungene Rückkehr zum Unterprogramm
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