De manera predeterminada, la grabadora de macros usa referencias absolutas lo cual ocasiona que al ejecutar la macro las acciones se apliquen siempre sobre las mismas celdas de la hoja.
No importa en qué ubicación de la hoja te encuentres, si la macro fue grabada para insertar un valor en la celda A1, siempre se insertará en dicha celda.
En muchas ocasiones eso es lo que necesitamos de nuestra macro, pero habrá otros momentos en que queremos ejecutar una macro tomando en cuenta la posición en la que nos encontramos actualmente, es decir, que la macro se ejecute a partir de la celda activa.
Este concepto es más fácil de explicar con un ejemplo.
Macro con referencias absolutas
Para mostrar la diferencia entre los dos tipos de referencias usados en una macro, vamos a comenzar grabando una macro con referencias absolutas.
Nuestro objetivo es crear un macro que nos ayude a insertar en cuatro celdas las palabras Norte, Sur, Este y Oeste. Para hacer la grabación seguimos los siguientes pasos:
- Abrimos Excel y en la pestaña Vista hacemos clic en el menú del botón Macros y elegimos la opción Grabar macro.
- En el cuadro de diálogo colocaré el nombre ReferenciasAbsolutas y como atajo de teclado colocaré Ctrl+Shift+A y pulsamos el botón Aceptar.
- En la celda A1 ingreso el texto Norte y pulso Entrar
- En la celda A2 ingreso el texto Sur y pulso Entrar
- En la celda A3 ingreso el texto Este y pulso Entrar
- En la celda A4 ingreso el texto Oeste y pulso Entrar.
- En el menú del botón Macros elijo la opción Detener Grabación
Probando la macro con referencias absolutas
Para probar la macro activaré la Hoja2 del libro que está en blanco y en seguida activaré la celda E1. Una vez que he activado la celda, pulsaré el atajo asociado a la macro recién creada: Ctrl+Shift+A. El resultado que observamos es el siguiente:
La celda E1 tiene el valor Norte, pero el resto de los valores fue insertado en la columna A, específicamente en las celdas A2, A3 y A4.
Esto sucede porque esas instrucciones tienen referencias absolutas y Excel sigue al pie de la letra ese código.
Si eres un usuario que ya conoce un poco de VBA puede analizar el código de la macro y verás que, sin importar la celda que tengas seleccionada al momento de ejecutar la macro, siempre se seleccionarán e insertarán los valores en las celdas A2, A3 y A4:
Este comportamiento lo solucionamos si grabamos la macro usando referencias relativas que es el ejemplo que veremos a continuación.
Grabando la macro con referencias relativas
Para grabar una macro con referencias relativas necesitamos activar dicha funcionalidad antes de iniciar la grabación. Eso lo hacemos con el comando Usar referencias relativas que encontramos en el menú del botón Macros de la pestaña Vista.
Este comando también lo encontramos en la pestaña Programador, dentro del grupo Código. Una vez que hacemos clic en este botón se mostrará activo y entonces podemos iniciar con la grabación.
Para esta macro seguiremos los mismos pasos que para la macro anterior y solo cambiaremos el nombre y atajo de teclado asignado.
- En la pestaña Vista hacemos clic en el menú del botón Macros y elegimos la opción Grabar macro.
- En el cuadro de diálogo colocaré el nombre ReferenciasRelativas y como atajo de teclado colocaré Ctrl+Shift+R y pulsamos el botón Aceptar.
- En la celda A1 ingreso el texto Norte y pulso Entrar
- En la celda A2 ingreso el texto Sur y pulso Entrar
- En la celda A3 ingreso el texto Este y pulso Entrar
- En la celda A4 ingreso el texto Oeste y pulso Entrar.
- En el menú del botón Macros elijo la opción Detener Grabación
Probando la macro con referencias relativas
Al igual que la macro anterior, activaré una hoja vacía y haré clic en la celda E1 y pulsaré el atajo de teclado Ctrl+Shift+R para ejecutar la macro.
En esta ocasión la lista de textos se muestra correctamente por debajo de la celda E1. Puedes activar cualquier celda de la hoja y ejecutar la macro y se insertarán correctamente los textos.
Esto sucede porque Excel ha usado referencias relativas, es decir, los desplazamientos de celda se hacen respecto a la celda activa al momento de ejecutar la macro.
En este caso, ya no vemos en el código alguna instrucción que haga referencias a las celdas A2, A3 o A4. En su lugar se observa la instrucción ActiveCell.Offset que se encarga de desplazar la celda activa una fila hacia abajo.
Por ahora no nos detendremos a explicar los detalles del código VBA pero era importante mostrar la diferencia que obteneos con solo activar las referencias relativas al momento de grabar una macro.