L'utilisation de la fonction dans VBA
-
Utilisation du type de fonction
non-objet
dans VBA -
Utilisation du type de fonction
object
dans VBA -
Utilisation de la commande
Exit Function
pour un retour forcé au sous-programme
Cet article montrera comment créer et utiliser une fonction lorsqu’il s’agit de VBA.
Les fonctions sont utilisées pour renvoyer un résultat là où un sous-programme ne le peut pas. Lorsque le programme devient plus long et plus complexe, les fonctions sont un outil utile pour faciliter l’organisation des blocs de code, le débogage et la révision du script.
Les fonctions peuvent être classées en deux sous-ensembles :
non-object-type |
fonction qui renverra des chaînes, des entiers, des booléens, etc. |
object-type |
fonction qui renverra un objet comme des plages, des listes de tableaux, etc. |
Syntaxe:
[Public | Private] [ Static ] Function name [ ( argumentlist ) ] [ As retType ]
[ statements ]
[ name = expression ]
[ Exit Function ]
End Function
Définition:
Public |
Optionnel. indique que d’autres procédures de tous les modules peuvent accéder à la fonction |
Private |
Optionnel. indique que la fonction n’est accessible que par les procédures du module en cours |
Static |
Optionnel. indique que la variable de procédure est conservée entre les appels de fonction |
name |
Obligatoire. Nom de la fonction |
argumentlist |
Optionnel. Liste des variables transmises une fois la fonction appelée. |
retType |
Optionnel. Type de retour de la fonction |
statements |
Bloc de code à exécuter |
expression |
Valeur de retour de la fonction |
Utilisation du type de fonction non-objet
dans VBA
Le bloc de code ci-dessous calculera l’aire d’un triangle en fonction de sa base et de sa hauteur comme arguments à l’aide d’un type de fonction non-objet
.
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
Production :
The area of the triangle is 40 square meters.
Utilisation du type de fonction object
dans VBA
Le bloc de code ci-dessous montrera comment utiliser un type de fonction object
pour calculer la somme de tous les nombres entre deux nombres.
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
Production :
The total sum is 165.
Utilisation de la commande Exit Function
pour un retour forcé au sous-programme
Renvoyer une valeur à un sous-programme ou à une fonction ne signifie pas nécessairement que l’exécution du code dans la fonction en cours s’arrêtera. Nous devons déclarer explicitement pour arrêter l’exécution du code sur la fonction. La commande à utiliser est Exit Function
.
L’appel d’une fonction sans la commande Exit Function
peut renvoyer des valeurs erronées.
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
Sortie TestFunction
:
Negative
La sortie est Negative
même si l’entrée TestFunction
est 5
, car l’exécution du code ne s’est pas arrêtée lorsqu’elle a atteint la ligne de code PositiveOrNegative = "Positive"
.
Nous devons utiliser la commande Exit Function
pour résoudre ce problème.
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
Production :
Positive