Estructura del código. Procedimiento en VBA

Un procedimiento en VBA (Visual Basic for Applications) es un bloque de código de programación que realiza una tarea específica. Por tanto, los procedimientos nos permiten dividir un programa más o menos complejo y extenso en diferentes bloques que realizarán tareas más sencillas de programar y depurar. En VBA existen tres tipos de procedimientos:

  • Sub (Subrutina o procedimiento)
  • Function (función)
  • Property (propiedad)

Insertaremos un procedimiento en VBA desde el menú insertar en la ventana del Editor de Visual Basic.

Procedimiento en VBA
Procedimiento en VBA

Alcance del procedimiento en VBA

El alcance de un procedimiento se refiere a dónde se va a poder utilizar. Podemos hablar de varios tipos de alcance:

  • Public (Público). Se podrá utilizar desde cualquier módulo de nuestro libro de Excel.
  • Private (Privado). Este tipo de procedimiento sólo podrá ser llamado desde otro procedimiento del mismo módulo.

Si no se especifica ningún alcance cuando se define el procedimiento, este será de tipo Public.

También podemos definir un procedimiento como tipo Static (Estático): Mantiene el valor de las variables entre distintas llamadas al procedimiento.

Procedimiento en VBA: Subrutinas

Un procedimiento o subrutina es un bloque de código que realiza una tarea específica. Podemos crear un procedimiento desde el menú insertar en la ventana del Editor de Visual Basic. Indicaremos el ámbito de trabajo y si deseamos mantener las variables locales como estáticas. En realidad, las macros que grabamos en Excel son subrutinas públicas.

Los procedimientos nos aparecerán definidos de esta manera en el módulo:

Ámbito Sub nombre_procedimiento()
' podemos introducir comentarios a nuestro código con el uso de la comilla
End Sub

Las instrucciones que forman parte de nuestra subrutina se colocarán entre estas dos líneas:

Ámbito Sub nombre_procedimiento()
    instrucciones
End Sub

Procedimientos con argumentos

Entre los paréntesis que aparecen tras el nombre del procedimiento podemos especificar los argumentos externos que necesita el procedimiento para realizar su tarea. Estos argumentos se deberán pasar cuando se llame al procedimiento desde otra parte del programa.

Por ejemplo, creamos un procedimiento que suma dos números enteros. Estos números se le pasarán como argumento:


Public Sub sumar(num1 As Integer, num2 As Integer)
    MsgBox "El resultado de sumar " & num1 & " y " & num2 & " es " & num1 + num2
End Sub 

num1 y num2 son los dos argumentos que se le deben pasar al procedimiento. Se han definido con el tipo de dato integer, es decir, números enteros. En otra lección hablaremos de los tipos de datos que podemos utilizar.

La instrucción MsgBox crea un cuadro de mensaje con el texto que se le pasa a continuación. El símbolo & permite unir cadenas de texto.

Procedemos a llamar al procedimiento recién creado desde otra parte de nuestro programa, con la instrucción Call nombre_procedimiento(argumentos):

Public Sub programa()
    Call sumar(1, 3)
End Sub

Este será el resultado que aparecerá en pantalla cuando ejecutemos el código.

mensaje Procedimiento en VBA

Tipos de referencia para los argumentos

Los argumentos que se pasan a los procedimientos pueden ser utilizados con dos tipos de referencia:

  • ByVal:  el elemento pasado como argumento no será modificable, puesto que solo se enviará el valor.
  • ByRef: el procedimiento podrá cambiar el elemento enviado en el código de llamada. Es la opción que se toma por defecto.

Veamos mejor la diferencia mediante un ejemplo:

Public Sub programa()
Dim a, b As Integer
a = 1
b = 3
    Call sumar(a, b)
    MsgBox "a es " & a & " y b es " & b
End Sub

Public Sub sumar(ByVal num1 As Integer, ByRef num2 As Integer)
    MsgBox "El resultado de sumar " & num1 & " y " & num2 & " es " & num1 + num2
    num1 = 0
    num2 = 0
End Sub

Definimos a y b como variables de tipo número entero (hablaremos de cómo definir y utilizar variables en otra lección). Asignamos un valor a estas variables y se las pasamos como argumento al procedimiento sumar. La primera variable se pasa por valor y la segunda por referencia. Después de la llamada a la función sumar comprobamos el valor de nuestras variables a y b. Este es el mensaje que nos aparece en pantalla.

Tipos de referencia en los procedimientos vba

El procedimiento ha modificado la variable que pasamos por referencia pero, en cambio, no modifica la variable pasada por valor.

Si deseas más información sobre los procedimientos, también puedes consultar la ayuda de Microsoft Office sobre Cómo crear un procedimiento.

Procedimiento en VBA: Funciones

Las funciones son otro tipo de procedimientos. A diferencia de las subrutinas, las funciones devuelven un valor como resultado de la propia función. La forma de declarar o definir una función es muy similar a la utilizada con las subrutinas.

Ámbito Function nombre_funcion(argumentos) as Tipo_de_dato
    instrucciones
End Function

El alcance o ámbito de un procedimiento también puede ser:

  • Public (Público). Se podrá utilizar desde cualquier módulo de nuestro libro de Excel.
  • Private (Privado). Este tipo de función sólo podrá ser llamado desde otro procedimiento del mismo módulo.

Definimos los argumentos de la misma manera que en los procedimientos. También pueden ser utilizados con dos tipos de referencia: ByVal o ByRef.

Como la función va a devolver un resultado, indicamos en la propia definición de la función el tipo de dato devuelto por la función.

Veamos un ejemplo de función:

Public Sub programa()
    resultado = sumar(1, 3)
    MsgBox "El resultado es " & resultado
End Sub

Function sumar(num1 As Integer, num2 As Integer) As Integer
    sumar = num1 + num2
End Function

Creamos una función llamada sumar a la que se le pasan dos números enteros como argumentos. La función devolverá un número entero que será la suma de estos números. Con esta instrucción indicamos el valor que va a devolver la función:

sumar = num1 + num2

Usamos el mismo nombre de la función para devolver el resultado.

Desde el procedimiento programa llamamos a la función pasándole dos números como argumentos. El resultado devuelto por la función lo guardamos en una variable que, posteriormente, es mostrado en pantalla mediante la instrucción MsgBox.

Las funciones creadas en Excel también podrán utilizarse en nuestras hojas de cálculo:

función en hoja de cálculo

Por tanto, si queremos realizar algún cálculo en nuestras hojas de Excel que no puede ser efectuado por ninguna de las funciones del programa, podemos crear nuestra propia función.

Si deseas más información sobre las funciones, también puedes consultar la ayuda de Microsoft Office sobre escritura de un procedimiento Function.

Funciones integradas en VBA

En VBA disponemos de algunas funciones propias de este lenguaje de programación que podemos utilizar en nuestros programas. En la página de soporte de Microsoft Office tenemos una lista completa de las Funciones en VBA.

Veamos algunas de ellas:

Función Round

Esta función devuelve un número redondeado al número de decimales especificado. Su sintaxis es la siguiente:

Round(expresión_numérica, [ num_de_decimales ])

Función Val

Devuelve los números incluidos en una cadena de texto.

MiValor = Val("2356")    ' Devuelve 23567.
MiValor = Val(" 2 35 6")    ' Devuelve 2356.
MiValor = Val("23 y 56")    ' Devuelve 23.

Función InputBox

Muestra un cuadro de diálogo en pantalla con un mensaje y un cuadro de texto para que el usuario escriba. Devuelve el contenido del cuadro de texto introducido por el usuario.

MiTexto = InputBox("Escribe un valor entre 1 y 3", "Ejemplo de InputBox")
Ejemplo de InputBox

Función MsgBox

Muestra un mensaje en pantalla mediante un cuadro de diálogo. También podemos definir los botones que aparecen en el cuadro de diálogo. En este caso la función nos devuelve un valor que indica el botón que ha pulsado el usuario.

Función Left

Extrae un número especificado de caracteres del lado izquierdo de una cadena de texto.

Texto = "Hola Mundo"    
MiCadena= Left(Texto, 1)   ' Devuelve "H".
MiCadena= Left(Texto, 7)   ' Devuelve "Hola Mu".
MiCadena= Left(Texto, 20)   ' Devuelve "Hola Mundo".

Función Right

Extrae un número especificado de caracteres del lado derecho de una cadena de texto.

Función Mid

Extrae un número especificado de caracteres de una cadena de texto, indicando la posición y la longitud del texto que queremos extraer. La sintaxis de la función es:

Mid(cadena_texto, inicio, [ longitud ])

CadenaTexto = "Hola Mundo"    
TextoExtraido = Mid(Texto, 1, 4)    ' Devuelve "Hola"
TextoExtraido = Mid(Texto, 6, 5)    ' Devuelve "Mundo"

Función Len

Esta función devuelve el número de caracteres de una cadena de texto o el número de bytes necesarios para almacenar una variable.

Función Date

Devuelve la fecha actual del sistema.

FechaActual= Date    ' FechaActual contendrá la fecha del sistema.

Función Now

Devuelve la fecha y la hora actuales conforme está definida en el sistema del equipo.

Función RGB

Devuelve un número entero que representa una valor de color RGB. La sintaxis es la siguiente:

RGB(rojoverdeazul). Donde rojo, verde y azul es un número de 0 a 255 que representa el componente del color.

Para poder avanzar en el desarrollo de macros en Excel debemos conocer el uso de variables, Las estructuras condicionales If..then y Select Case y las estructuras de bucles en VBA. Además, te recomendamos nuestros curso orientado al diseño de macros.

Diseño de macros en Excel. Con ejemplos prácticos

Esta entrada es parte de nuestro curso Diseño de macros en Excel. Con ejemplos prácticos

Diseño de macros en Excel. Con ejemplos prácticos

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *