El editor de VBA a fondo

Editor de vba Excel

Con esta publicación da comienzo una nueva serie de tutoriales dedicada a la automatización de Excel mediante macros y VBA.

En este tutorial publicado hace unas semanas te enseñé a utilizar la grabadora de macros para realizar algunas tareas sencillas.

Pero si realmente quieres sacarle todo el jugo a esto automatizar tus tareas, debes dar un paso adelante y comenzar a programar ‘a mano’. La grabadora de macros puede ayudarte a hacer el trabajo pero al final… llega hasta donde llega.

Y el primer paso que debes dar para trabajar con VBA es familiarizarte con el editor de VBA.

En este artículo te enseñaré todo lo que hay que saber sobre el editor de VBA y algunos consejos que te servirán cuando estés creando tus procedimientos.

Qué es el editor de VBA

El editor de VBA lleva integrado en Excel desde su versión ‘97 y es una aplicación independiente que se abre siempre que abres Excel. De forma predeterminada se encuentra oculta y para acceder a él hay que activarlo.

El editor de VBA es el lugar donde se guarda el código.

Existen varias formas de introducir el código:

  1. Cuando grabas una macro, se crea automáticamente un módulo nuevo en el editor de VBA en el cual se inserta el código grabado.
  2. Introduciéndolo manualmente.
  3. Copiando un código de algún otro libro de Excel (o de Internet) y pegándolo en el editor de VBA.

Cómo acceder al editor de VBA

Si antes de leer esto desconocías que existía el editor de VBA, te habría sido muy difícil dar con él, pues no se encuentra accesible. Existen varias formas de abrir de abrirlo:

  1. Con el atajo de teclado Alt + F11.
  2. Desde la ficha Programador (o Desarrollador). Si no la ves en la cinta de opciones, aquí te enseño como hacer que se muestre.
  3. Desde la ficha de una hoja. Haz clic con el botón derecho del ratón en la ficha de una hoja y selecciona Ver código.
  1. Este método no solo abrirá el editor, sino que te llevará directamente a la ventana de código de la hoja que hayas seleccionado. Es útil cuando quieres escribir código para que funcione solo en esa hoja. Se suele usar para programar eventos en VBA.

Contenido de la ventana del editor

Cuando abres el editor de VBA por primera vez puede que no sepas ni por dónde comenzar… Es normal. A mí me ocurrió lo mismo. Pero a medida que te acostumbres a trabajar con VBA, te sentirás cómodo con la mayoría de las zonas del editor.

Hay muchas ventanas diferentes y nuevas secciones que pueden dar la impresión de que es difícil de usar.

La primera impresión es de ser un programa antiguo y desfasado. ¡Microsoft no ha cambiado la interfaz desde Excel ’97!

¿Quieres conocer las partes del editor de VBA?

Barra de menú

Aquí se encuentran todas las opciones que puedes usar en el editor de VBA. Es similar a la cinta de opciones de Excel. Cuenta con varias pestañas y varias opciones en cada una de ellas.

Puedes explorar las opciones que tiene haciendo clic en cada uno de los elementos del menú.

Si eres de los que prefiere usar el teclado al ratón, la mayoría de los comandos tienen su atajo de teclado asignado. Los podrás distinguir porque tienen una letra subrayada. Para acceder al comando solo tienes que presionar la tecla Alt y la tecla de la letra que esté subrayada.

Barras de herramientas

Debajo del menú están las barras de herramientas. De forma predeterminada únicamente se muestra una barra. Aunque contiene herramientas muy usadas, posiblemente necesitarás alguna más. Para agregar o eliminar comandos de una barra de herramientas puedes hacer clic en el desplegable como se muestra en la imagen:

En la mayoría de los casos la barra de herramientas ‘Estándar’ es la única que necesitas para trabajar con el editor de VBA de Excel.

Puedes mover la barra a cualquier otra posición de la ventana, incluso por encima del menú principal. Solo tienes que arrastrarla a la posición deseada.

El editor de VBA de Excel tiene cuatro barras de herramientas: Estándar (la que aparece en la imagen anterior), Edición, Depuración y UserForm. Para acceder a las otras barras puedes ir al menú Ver y, en la opción Barras de herramientas, activar las que desees.

Explorador de proyectos

El Explorador de proyectos es la ventana que se encuentra en la parte superior de la izquierda. Se encarga de mostrar todos los objetos de Excel abiertos en este momento.

Cuando trabajas con Excel, cada libro o complemento es un ‘proyecto’. Cada proyecto puede tener a su vez una colección de objetos dependiendo de él. Por ejemplo, en la siguiente imagen aparece el Explorador de proyectos con dos libros abiertos (Libro1 y Libro2). Observamos que cada libro contiene un objeto para la hoja (al crear una hoja nueva se crea un objeto en el proyecto) y un objeto de libro llamado ThisWorkbook. Libro2 contiene también un módulo estándar. En la imagen se muestra mi libro de macros personal donde almaceno las utilidades y macros que uso en mi día a día.

Otros objetos que no se muestran en la imagen pero podrían formar parte de los proyectos abiertos serían:

  • UserForms
  • Módulos de clase
  • Hojas de gráfico
  • Otros complementos que tengas activos.

Cada objeto del Explorador de proyectos tiene su propia ventana de código donde escribir o pegar el código VBA. Las ventanas de código aparecen al hacer doble clic en el objeto.

Ventana Código

Las ventanas de código son donde escribirás el código VBA (obvio, ¿verdad? ????).

Cuando grabas una macro con la grabadora, el código se guarda en la ventana de código de un módulo estándar. Si el módulo no existe, Excel lo inserta automáticamente para colocar el código.

Ventana Propiedades

Se trata de una ventana flotante que al igual que el Explorador de proyectos puedes mantener fija en el marco del editor. En esta ventana es donde se pueden ver y modificar las propiedades del objeto seleccionado. Si no puedes ver la ventana, presiona la tecla F4. También puedes mostrarla haciendo clic en el menú Ver y a continuación en la opción Ventana Propiedades. Por ejemplo, si quieres activar la propiedad AutoSaveOn (para hacer guardados automáticos) del Libro1, debes hacer clic en el objeto ThisWorkbook del proyecto del Libro1 en el Explorador de proyectos y, a continuación desplegar el combo de la propiedad para establecer el valor en True

Ventana Inmediato

Se utiliza principalmente cuando vas a depurar el código (examinarlo en busca de fallos o errores).

Mi forma de usarla es introduciendo la instrucción Print.Debug dentro de la ventana de código cuando quiero conocer el valor de una variable. Este valor se muestra en la ventana Inmediato.

Esto me ayuda a ‘arreglar’ el código y saber dónde se producen errores.

Si eres nuevo con VBA puede llevarte algún tiempo llegar a usar la ventana Inmediato.

En caso de que no se muestre en la pantalla (de forma predeterminada no lo hace) solo tienes que presionar las teclas Ctrl + G (o ir al menú Ver).

Dónde introducir tu código en el editor

Ahora que conoces las partes básicas del editor de VBA (existen otras ventanas y secciones), es hora de saber dónde puedes agregar tu código VBA.

Hay dos lugares donde puedes agregar código:

  • En la ventana de código de un objeto (libro, hoja, UserForm, etc.)
  • En la ventana de código de un módulo

¿Y cuál es la diferencia?

Cuando escribes (o pegas) código en un objeto, solo se activará cuando realices alguna acción con ese objeto. Me explico: si quieres ocultar todas las hojas del libro nada más abrir ese libro, entonces el código debe ir en el objeto ThisWorkbook (que representa el libro). El desencadenante (llamado evento en VBA) es la apertura del libro. Cuando se abre el libro, se ejecuta el procedimiento.

Del mismo modo, si quieres proteger una hoja en el momento de activarla, el código para ello iría en la ventana de código de dicha hoja.

Como puedes comprobar, puedes asociar un código a un evento para que, al producirse ese evento, se ejecute la macro.

Por el contrario, el código escrito en un módulo debe ejecutarse manualmente (o llamarlo desde otros procedimientos).

Cuando grabas una macro, Excel crea automáticamente un módulo e inserta en él el código de la macro grabada. Por ello si quieres ejecutar la macro, debes hacerlo de forma manual (ya sea presionando un botón o activando algún control, pero siempre existirá una acción voluntaria).

En un módulo

Aunque la grabadora de macros crea automáticamente un módulo e inserta el código en él, existen limitaciones a la hoja de usarla. Por ejemplo, no es posible usar bucles o condiciones If Then Else.

En estos casos es mejor escribir el código tú mismo. Ten en cuenta que hay tres tipos de código:

  1. Declaraciones: Declarar variables en un módulo te permite especificar qué tipo de datos pueden contener dichas variables. Puedes crear una variable para un solo procedimiento o para todos los procedimientos del módulo (o todos los módulos).
  2. Procedimiento: Es el código que contiene las acciones que quieres que haga la macro.
  3. Función: Es un tipo de código que devuelve un único valor y que puedes usar para crear funciones personalizadas (Funciones Definidas por el Usuario, o UDF).

De forma predeterminada un módulo no forma parte de un libro. Tienes que crearlo manualmente (o usando la grabadora). Para crearlo:

  1. Haz clic con el botón derecho del ratón en cualquier objeto del libro en el que quieras introducir el módulo.
  2. En el menú contextual haz clic en Insertar > Módulo.

Como puedes comprobar, se crea una carpeta llamada Módulos y dentro de ella aparece el Módulo1. Una vez creado el módulo ya puedes hacer doble clic sobre él para abrir su ventana de código.

Para eliminar un módulo existente el proceso es similar al anterior. Solo tienes que hacer clic con el botón derecho del ratón encima del objeto y seleccionar Quitar módulo. Se abrirá un cuadro de diálogo para confirmar la eliminación.

Si quieres guardar el módulo para futuros usos puedes hacerlo desde el cuadro de mensaje (ver imagen anterior).

En un objeto

Para introducir código VBA en la ventana de código de un objeto, basta con hacer doble clic sobre él.

Cuando se abra, puedes introducir el código manualmente o copiar y pegar el código de otros módulos o de internet. Debes tener en cuenta que al hacer clic en alguno de los objetos se abrirá su ventana de código mostrando el evento predeterminado de dicho objeto. En otros debes seleccionar manualmente el evento al que quieres que atienda el código.

Por ejemplo, si quieres escribir un procedimiento para que ocurra algo cuando se hace un cambio en la hoja, tienes que seleccionar primero el objeto en el desplegable de la izquierda y luego seleccionar el evento de cambio de la hoja en el desplegable de la derecha.

Los eventos que se despliegan en la parte derecha son específicos para el objeto seleccionado. Cuando la ventana del objeto ThisWorkbook verás los eventos relacionados con el libro y cuando abras la ventana de código de una hoja, verás los eventos relacionados con la hoja.

Personalizar la ventana del editor

Aunque la configuración del editor de VBA es lo suficientemente buena para la mayoría de los usuarios de Excel, es posible personalizar aún más la interfaz y algunas de sus funciones.

Para personalizar el entorno del editor haz clic en el menú Herramientas y a continuación en Opciones.

Esto abrirá el cuadro de diálogo Opciones donde se encuentran todas las opciones de personalización. Como ves en la imagen de debajo el cuadro tiene cuatro pestañas con varias opciones de personalización.

Te muestro de forma detallada las pestañas del cuadro:

Pestaña editor

Aquí encontrarás algunas opciones generales del editor. A medida que vas teniendo práctica con VBA es posible que quieras personalizar el editor utilizando alguna de estas opciones:

Comprobación de sintaxis automática

Si la casilla se encuentra activada, Excel mostrará un mensaje de error nada más detectar un error de sintaxis. Un cuadro similar al siguiente:

Si desactivas esta opción el cuadro anterior no aparecerá cuando cometas un error de sintaxis pero se resaltará el texto para indicar que hay un error.

Si acabas de comenzar con VBA te recomiendo que mantengas esta casilla activada. A medida que tengas más experiencia al escribir código puede que te canses de ver estos cuadro de mensaje y quieras ocultarlos.

Requerir declaración de variables

Esta opción mantenla activa sí o sí.

Al trabajar con VBA se utilizan variables para almacenar diferentes tipos de datos y objetos. Cuando activas esta opción se inserta automáticamente la declaración Option Explicit en la parte superior de la ventana. Esto te obliga a declarar todas las variables que uses en el código. Si no declaras una variable e intentas ejecutar el código se mostrará un mensaje de error.

En el ejemplo de la imagen he utilizado la variable saludo pero no la he declarado. Por tanto cuando intento ejecutar el código se muestra ese error.

Esta opción es realmente útil cuando tienes muchas variables. Yo la suelo usar para detectar nombres de variables mal escritos, pues se consideran como no declarados y se muestra el error.

Lista de miembros automática

Esta opción es bastante útil porque te ayuda mediante una lista a elegir la propiedad o el método adecuado para un determinado objeto. Mientras estás introduciendo código, al escribir un punto se mostrará la lista de propiedades y métodos asociados al objeto escrito.

Esta opción siempre la tengo activa porque me permite seleccionar rápidamente la propiedad o el método. También me ayuda a conocer las propiedades asociadas a un objeto (como puedes imaginar, no las conozco todas). Y otra utilidad es que me ayuda a prevenir errores de introducción de datos.

Información rápida automática

Esta opción es similar a los cuadros informativos que aparecen al introducir una función de hoja. Cuando abres el paréntesis aparece la sintaxis de la función.

Sugerencias de datos automáticas

Mientras estás ejecutando un código línea por línea y colocas el puntero del ratón encima de una variable, te mostrará el valor que contiene en ese momento.

Sangría automática

En muchas ocasiones los procedimientos que escribas serán largos y aparentemente desordenados. Para mejorar la legibilidad se utilizan sangrías.

Puedes utilizar la tecla Tab para sangrar la línea de código.

La opción de sangría automática te asegura que cuando finalizas con la línea ya sangrada y presionas Intro, la siguiente línea no empiece desde el inicio de la línea sino que tenga la misma sangría que la línea anterior.

Modificar texto mediante “arrastrar y colocar”

Al activar esta opción, te permite seleccionar un bloque de código y arrastrarlo a otro lugar de la ventana.

Esto ahorra tiempo, pues no tienes que cortar y pegar. Simplemente lo seleccionas y lo mueves.

Vista completa predeterminada del módulo

Si activas esta opción, podrás ver todos los procedimientos de un módulo en una única lista.

Si está desactivada solo podrás un módulo a la vez. Tendrás que seleccionar el módulo en la parte superior derecha de la ventana.

Separador de procedimientos

Permite separar dos procedimientos mediante una línea. Útil para diferenciarlos. Te recomiendo mantenerla activada.

Pestaña Formato del editor

Desde esta pestaña puedes personalizar el aspecto de la ventana de código. Personalmente no he tocado ninguna opción de la ficha porque me gustan las que tiene por defecto. Si quieres puedes ajustarlas según tus preferencias.

En caso de que quieras hacer modificaciones, selecciona primero una opción de la lista Colores del código y a continuación puedes hacer las modificaciones que desees. También puedes establecer el tamaño y el tipo de fuente. Te recomiendo usar una fuente de ancho fijo como Courier New, pues hace que el código sea más legible (todos los caracteres tienen el mismo ancho).

Pestaña General

La pestaña General tiene muchas opciones pero no es necesario cambiar ninguna. Te recomiendo dejar las que están por defecto.

Una opción importante de esta pestaña que debes conocer es la de ‘Interceptación de errores’. Gracias a ella, si el código contiene un error y este no se ha gestionado, el código se detendrá.

Pestaña Acoplamiento

Desde esta pestaña puedes especificar qué ventanas quieres que se acoples.

¿Qué es acoplar? Simplemente fijar la posición de una ventana (por ejemplo el Explorador de proyectos o la ventana Propiedades) para que no esté flotando por la pantalla y puedas ver todas las ventana al mismo tiempo.

Si no usas el acoplamiento de ventanas, puede que alguna ventana se muestre por encima de otra y tengas que moverla para ver el contenido de la de debajo.

Te recomiendo mantener la configuración predeterminada.

Resumen

La mayor parte del trabajo con VBA la harás en el editor de VBA por lo cual es importante que conozcas como mínimo las opciones que contiene. Me he dejado en el tintero muchas opciones pero creo que las importantes las he plasmado en el artículo (eso espero)…