Comprender los argumentos con nombre y opcionales

Microsoft VBA

Comprender los argumentos con nombre y opcionales

   

Cuando se hace una llamada a un procedimiento Sub o Function, se pueden incluir argumentos de forma posicional, es decir, en el orden en que aparecen en la definición del procedimiento, o se pueden incluir los argumentos con su nombre sin respetar ningún orden.

Por ejemplo, el siguiente procedimiento Sub acepta tres argumentos:

Sub PasaArgs(strNombre As String, intEdad As Integer, dteNacimiento As Date)
    Debug.Print strNombre, intEdad, dteNacimiento
End Sub

Al llamar este procedimiento se pueden incluir sus argumentos en la posición correcta, todos separados por comas, tal y como muestra el siguiente ejemplo:

PasaArgs "María", 29, #21-2-69#

También se puede hacer una llamada a este procedimiento e incluir argumentos con nombre, separados por comas.

PasaArgs intEdad:=29, dteNacimiento:=#21/2/69#, strNombre:="Maria"

Un argumento nominativo está formado por el nombre del argumento seguido por dos puntos y un signo igual (:=), todo ello seguido por el valor del argumento.

Los argumentos con nombre son muy útiles cuando se llama a procedimientos con argumentos opcionales. Si se usan argumentos con nombre no será necesario incluir sucesivas comas para sustituir argumentos posicionales ausentes. Al usar argumentos con nombre es más fácil controlar qué argumentos se pasan y cuáles se omiten.

Los argumentos opcionales van precedidos por la palabra clave Optional en la definición del procedimiento. En la definición del procedimiento se puede especificar también un valor predefinido para el argumento opcional. Por ejemplo:

Sub ArgsOpcionales(strProvincia As String, Optional strPais As String = "MÉXICO")
. . . 
End Sub

Cuando se hace una llamada a un procedimiento con un argumento opcional, se puede optar por especificar o no el argumento opcional. Si no se especifica, se usará el valor predefinido si existe. Si no se ha especificado tampoco un valor predefinido, el argumento tendrá el valor de inicialización que le corresponda a una variable del mismo tipo.

El siguiente procedimiento incluye un argumento opcional, la variable varPais. La función IsMissing determina si se ha pasado o no un argumento opcional al procedimiento.

Sub ArgsOpcionales(strProvincia As String, Optional intRegion As Integer, _
Optional strPais As String = "MÉXICO")
    If IsMissing(intRegion) AND  IsMissing(strPais) Then
        Debug.Print strProvincia
    ElseIf IsMissing(strPais) Then
        Debug.Print strProvincia, intRegion
    ElseIf IsMissing(intRegion) Then
        Debug.Print strProvincia, strPais
    Else
        Debug.Print strProvincia, intRegion, strPais
    End If
End Sub

Este procedimiento se puede llamar empleando argumentos con nombre tal y como muestran los siguientes ejemplos.

ArgsOpcionales strPais:="MÉXICO", strProvincia:="SE"

ArgsOpcionales strProvincia:= "SE", intRegion:=5