En este artículo aprenderás de forma rápida y concisa las herramientas, estructuras, tips e ideas esenciales para ser un buen programador en el lenguaje VBA (Visual Basic for Applications) enfocándonos en Excel. Recuerda que siempre puedes revisar la documentación oficial de Microsoft.

Glosario

Objetos recurrentes

En pocas palabras es una ventana o contenedor a la cual le puedes añadir diversos controles (botones, imagenes, textbox, etc.) para interactuar con el usuario.

La aplicación completa, es decir, el conjunto de todos los libros, configuraciones y otras propiedades del programa Excel.

EL objeto Workbook hace referencia a una un libro de Excel. La aplicación puede contener múltiples libros abiertos.

 

Hace referencia a cada una de las hojas de un libro (workbook) como se muestra en la siguiente imagen.

Uno de los objetos más importantes del lenguaje VBA. Hace referencia al conjunto de una o más celdas (Una selección es un rango pero no todos los rangos son selecciones). Pero la imagen representa bien el concepto de conjunto de celdas. 

Eventos recurrentes

Worksheet_Change

Sucede cuando hay algún cambio de contenido en alguna de las celdas de la hoja de calculo.

Resultado de imagen de worksheet_change

 

Worksheet_SelectionChange

Sucede cuando se cambia la selección ya sea una sola celda o un rango.

Resultado de imagen de worksheet_selectionchange

Funciones o procedimientos recurrentes

Application.ScreenUpdating

Lo que hace esta función es congelar la pantalla de la aplicación para que no se puedan ver cambios visuales. 

Application.EnableEvents

Desactiva o activa la funcionalidad de los eventos.

Si es false los eventos no suceden de manera natural.

Si es true los eventos funcionan normalmente.

Sintaxis

Foreach ... next

While ... wend

Tips prácticos

Recorrer tablas

Existen infinitas formas de recorrer una tabla en un excel con VBA. La forma que más utilizo yo es usando el while.

Consiste en posicionarnos usando un objeto range en el primer registro de nuestra tabla (la columna debe de ser un dato que sea obligatorio, por ejemplo, el id, ya que si detecta un campo vacío se detendrá el procedimiento finalizando el recorrido) e ir avanzando a la celda de abajo una vez terminemos de hacer los cálculos que queramos antes de que sea el cierre del while (wend).

Ejemplo.

Dim micelda as range
Set micelda = range("A1")
While micelda.Value <> ""
'[proceso]
Set micelda = micelda.Offset(1,0) 'Avanzamos una celda abajo para evaluarla en la próxima iteración
Wend

Variable global para usar rangos

Conforme más trabajamos en VBA, nos vamos dando cuenta de que usamos mucho los rangos de celdas. Una forma de evitar estar declarando variables en cada procedimiento o función que ocupamos es declarar una variable global para uso de rangos.

Esto lo hacemos declarando un rango dentro de un Módulo.

Public micelda as range

De esta manera tendremos disponible esa variable en cualquier parte de nuestro programa.

Dim micelda as range

Es toda la sintaxis de este sencillo pero muy útil tip. Te ahorrará el tiempo o evitará posibles dolores de cabeza buscando el error en tu código.

Ideas útiles

Excel y Access

Combinando estas herramientas se le puede sacar mucho potencial a estas aplicaciones.

Una ventaja de esto es que puedes utilizarlo para hacer un excel multiusuario. Así las cosas no se modifican directamente en la hoja ya que para hacer cambios tienen que hacerlo a través del UserForm.