Procedimientos, funciones y paso de argumentos
El dominio Procedimientos, funciones y paso de argumentos comprueba si distingues cuándo un bloque devuelve valor y cómo se comportan los parámetros entre el llamador y el procedimiento.
Sub frente a Function
Un Sub ejecuta acciones y no devuelve nada; una Function devuelve un valor asignándolo a su propio nombre antes de End Function. El tipo de retorno se declara (As Double); si se omite, devuelve Variant. Una función sin asignación explícita devuelve 0, cadena vacía o Empty según su tipo.
Paso de argumentos
- Por defecto los argumentos son
ByRef: el procedimiento recibe la dirección de la variable y puede modificarla.ByValentrega una copia. Optional tasa As Double = 0.21define un parámetro opcional, siempre al final de la lista.IsMissingsolo funciona con parámetros Variant sin valor por defecto.ParamArray args()recoge un número indeterminado de argumentos.PublicyPrivatecontrolan la visibilidad en todo el proyecto o solo en el módulo.
Llamada
Como sentencia: Calcular precio o Call Calcular(precio). Como expresión: resultado = ConIVA(precio), con paréntesis obligatorios.
Ejemplo razonado
Function ConIVA(precio As Double, Optional tasa As Double = 0.21) As Double
ConIVA = precio * (1 + tasa)
End Function
El resultado se asigna a ConIVA, no a una variable local. El valor por defecto permite llamar ConIVA(100) o ConIVA(100, 0.10). Declarar Double evita el redondeo de Integer y documenta la intención.
Errores que cuestan puntos
No asignar nada al nombre de la función; envolver entre paréntesis la llamada a un Sub y alterar el paso de argumentos; olvidar que ByRef es el modo predeterminado y modificar sin querer la variable del llamador; y colocar un opcional antes de un obligatorio.