El uso de la función en VBA

Glen Alfaro 30 enero 2023
  1. Uso del tipo de función non-object en VBA
  2. Uso del tipo de función object en VBA
  3. Uso del Comando Salir de la Función para un Regreso Forzado a la Subrutina
El uso de la función en VBA

Este artículo demostrará cómo crear y utilizar una función cuando se trata de VBA.

Las funciones se utilizan para devolver un resultado donde una subrutina no puede. Cuando el programa se vuelve más largo y complejo, las funciones son una herramienta útil para facilitar la organización de bloques de código, la depuración y la revisión del script.

Las funciones se pueden clasificar en dos subconjuntos:

non-object-type función que devolverá cadenas, enteros, booleanos, etc.
object-type función que devolverá objetos como rangos, listas de arreglos, etc.

Sintaxis:

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

Definición:

Public Opcional. indica que otros procedimientos en todos los módulos pueden acceder a la función
Private Opcional. indica que solo se puede acceder a la función mediante procedimientos en el módulo actual
Static Opcional. indica que la variable de procedimientos se conserva entre llamadas a funciones
name Requerido. Nombre de la Función
argumentlist Opcional. Lista de variables que se pasan una vez que se llama a la función.
retType Opcional. Tipo de retorno de la función
statements Bloque de código para ejecutar
expression Valor de retorno de la función

Uso del tipo de función non-object en VBA

El siguiente bloque de código calculará el área de un triángulo dada su base y altura como sus argumentos utilizando un tipo de función 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

Producción :

The area of the triangle is 40 square meters.

Uso del tipo de función object en VBA

El siguiente bloque de código demostrará cómo usar un tipo de función object para calcular la suma de todos los números entre dos números.

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

Producción :

The total sum is 165.

Uso del Comando Salir de la Función para un Regreso Forzado a la Subrutina

Devolver un valor a una subrutina o una función no significa necesariamente que la ejecución del código en la función actual se detendrá. Necesitamos declarar para detener la ejecución del código en la función explícitamente. El comando a utilizar es Exit Function.

Llamar a una función sin el comando Exit Function puede devolver valores incorrectos.

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

Salida TestFunction:

Negative

La salida es Negativa aunque la entrada TestFunction sea 5 ya que la ejecución del código no se detuvo cuando llegó a la línea de código PositiveOrNegative = "Positive".

Necesitamos utilizar el comando Salir de la función para resolver esto.

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

Producción :

Positive

Artículo relacionado - VBA Function