Procedimientos, funciones y macros
Objetivos del capítulo
Antes de seguir avanzando en este libro, es necesario tener un vocabulario básico para entender el contenido de los siguientes capítulos. Este capítulo pretende ayudarle a orientarse y a comprender fácilmente las cuestiones que se tratan.
En la programación VBA, podrá utilizar varias palabras para definir los programas que usted escribirá. Sin orden de preferencia, verá, las palabras «procedimiento», «función» y «macro» relacionadas con los nombres de sus programas. También leerá acerca de la noción de ámbito y, por último, se abordarán los parámetros, datos que se proporcionan como entrada a sus programas.
Procedimientos, funciones y macros
Los programas que usted creará pasarán por dos tipos de bloques de instrucciones: procedimientos o funciones. El nombre «macro» es el que ha entrado en el vocabulario de los desarrolladores. Descubrirá lo que se esconde detrás de esta palabra.
Procedimientos
Los procedimientos que ha visto en los capítulos anteriores son bloques de instrucciones que se pueden ejecutar; por ejemplo, cuando se colorea una celda de amarillo. Los procedimientos no devuelven ningún valor, a diferencia de las funciones. Esta sección le mostrará cómo declararlos y utilizarlos.
Declarar un procedimiento
De la misma forma que para una variable, un procedimiento se debe declarar antes de poder utilizarlo. Se definen con la palabra clave Sub y se terminan con la instrucción End Sub.
Entre estas dos líneas, usted codificará las instrucciones que se ejecutarán cuando el procedimiento sea llamado desde alguna otra parte del programa.
La sintaxis para declarar un procedimiento es la siguiente:
[Private o Public] Sub NombreDeSuProcedimiento([param_1 As
TipoDeParametro],...)
Instrucciones
End Sub
El nombre del procedimiento debe respetar la nomenclatura de nombres (ver el capítulo Variables y constantes), y ser lo más explícito posible para facilitar su uso, como en el siguiente ejemplo.
Public Sub AgregarNumeroPresupuestoEnB2(iNumeroPresupuesto...
Public o Private, todo es cuestión de ámbito
Antes de los términos Sub y Function, puede ver las palabras clave Public o Private. El uso de la palabra clave le permite definir el ámbito del programa en toda su aplicación.
En las siguientes secciones, en un esfuerzo de legibilidad, se utilizará el término «variable», pero la información es la misma para las constantes. De igual manera, se utilizará el término «procedimiento», pero la información correspondiente también es válida para las funciones.
Noción de ámbito
Cuando se declaran y utilizan variables en un programa, se plantea la cuestión de la accesibilidad de estas variables en todo el programa. Dependiendo de cómo defina sus variables, puede que solo sean accesibles desde ciertos puntos de su programa.
Ámbito de las variables
Para las variables que utilice, existen tres posibles niveles de acceso en VBA:
-
A nivel de procedimiento: cuando las variables se declaran en el interior de un procedimiento, solo pueden ser utilizadas por las instrucciones dentro de él. Las variables no existen «fuera» de los procedimientos en los que se declaran. La palabra clave de definición es Dim, pero también puede utilizar Static.
Sub MacroEjemplo()
Dim bOK As Boolean
Static strEjemplo As String ...
Parámetros
Cuando se declara un procedimiento o función, puede requerir información que le será útil (por ejemplo, para calcular la edad de una persona, se necesita su fecha de nacimiento). Esta información se denomina, pues, parámetros. Esta sección le ofrece la información necesaria para entenderlos y dominarlos.
Sintaxis general
Los parámetros aparecen al declarar un procedimiento o función (no una macro, que, por definición, no tiene parámetros).
La sintaxis general de los parámetros es la siguiente:
Sub EjemploDeProcedimiento ([ByRef o ByVal] NombreDeParametro1 As
TipoDeParametro1, NombreDeParametro2 As TipoDeParametro2)
Instrucciones
End Sub
Ejemplo 11: declarar un procedimiento y sus parámetros
Los parámetros se declaran dentro de los paréntesis que siguen al nombre del procedimiento o función. En caso de que se necesite más de un parámetro, se separan con una coma.
El nombre de los parámetros sigue la misma nomenclatura que el de las variables. Pueden ir precedidos de las palabras clave ByRef o ByVal, mencionadas en la siguiente sección.
Cuando el parámetro se declara de la siguiente forma en un procedimiento:
Sub EjemploDeProcedimiento (ByVal NombreDeParametro As TipoDeParametro)
Instrucciones
End Sub
Ejemplo 12: declarar parámetros obligatorios
es obligatorio que el programa que llama a la función o procedimiento proporcione un valor para este parámetro. Es imposible determinar la edad exacta de una persona sin su fecha de nacimiento.
Diferencias entre ByRef o ByVal
Cuando se proporcionan parámetros al procedimiento, tiene la opción de permitir que el procedimiento modifique la propia variable o simplemente proporcionarle su valor.
Pasar por referencia: ByRef
Al utilizar la palabra clave ByRef, la función o procedimiento al que se pasa el parámetro recibe «realmente» la variable y, si esta se modifica dentro de la función o el procedimiento al que se llama, su valor también se modificará al regresar...
Ejercicios
Escribir macros
Macro privada
Escriba la macro MacroPrivida de ámbito privado.
Esta macro mostrará al usuario el valor 42.
Ejecute la macro MacroPrivada (42).
Macro pública
Escriba la macro MacroPublica de ámbito público.
Esta macro llamará a la macro MacroPrivada creada precedentemente.
Ejecute la macro MacroPublica (42).
Escribir procedimientos
Procedimiento de visualización
Escriba el procedimiento VisualizarDoble, de ámbito público, que tome como parámetro un valor numérico entero largo llamado Valor.
Este procedimiento mostrará el doble del valor que se le pasa como parámetro.
Cree la macro ProcedimientoVisualizar, que ejecutará el procedimiento VisualizarDoble, pasándole el valor 15.
Ejecute la macro ProcedimientoVisualizar(30).
Compartir variables públicas
Cree una variable de tipo Fecha llamada FechaCompartida, de ámbito público.
Esta declaración de variable se colocará en la parte superior del módulo.
Escriba el procedimiento llamado ProcedimientoFechaInicio, de ámbito público, que tome como parámetro una fecha llamada FechaInicio.
Este procedimiento actualizará la variable FechaCompartida asignándole un valor de FechaInicio + 1 día.
Escriba otro procedimiento llamado ProcedimientoFechaFin...