Hace algunas semanas escribí un artículo sobre cómo resaltar la fila de la celda activa y hoy he decidido hacer un ejemplo similar, pero solo para resaltar la celda activa en Excel. También implementaremos el código VBA necesario para mantener los colores originales de las celdas aún después de haberlas resaltado con un color diferente.
El objeto ActiveCell en VBA
Para alcanzar nuestro objetivo haremos uso del objeto ActiveCell que siempre apunta a la celda activa, y para resaltar dicha celda modificaremos su propiedad Interior.Color de la siguiente manera:
ActiveCell.Interior.Color = RGB(153, 204, 0)
La función RGB nos devolverá un valor entero que representará la combinación de colores rojo, verde y azul indicados como argumentos de la función. Aunque esta es la única instrucción VBA que necesitamos para resaltar la celda activa en Excel, será necesario implementar funcionalidad adicional para restablecer el color de la celda una vez que haya dejado de ser la celda activa.
Definir variables globales
El primer paso será definir las variables que nos ayudarán a tener una ”memoria” que nos permita recordar la última celda activa así como su color de relleno antes de ser resaltada por nuestro código. Esto será de gran importancia para restablecer el color original de la celda o de lo contrario terminaríamos con todas las celdas del mismo color al ir activando cada una de ellas.
Comenzaremos por abrir el Editor de Visual Basic (Programador > Código > Visual Basic) y haremos clic derecho en VBAProject para elegir la opción Insertar > Módulo. Una vez creado el módulo de código insertaré dos líneas como las siguientes:
La variable CeldaAnterior almacenará la referencia a la última celda activa y la variable ColorAnterior tendrá el color de relleno de dicha celda. Ambas variables han sido declaradas como Public porque serán accedidas desde otras subrutinas del libro.
El evento Worksheet_Open
Una vez que las variables ya han sido definidas, utilizaremos el evento Worksheet_Open para asignar un valor inicial a dichas variables. Para eso, dentro del panel izquierdo del Editor de Visual Basic, debes hacer clic en ThisWorkbook y colocar el siguiente código:
La primera instrucción guardará en la variable ColorAnterior el color de relleno de la celda activa y la segunda línea guardará la referencia a la celda activa en la variable CeldaAnterior. El siguiente paso será resaltar la celda activa cuando exista un cambio en la selección de celdas.
Resaltar la celda activa en Excel
Hasta ahora solo hemos declarado e inicializado las variables a utilizar, pero para resaltar una celda debemos modificar su propiedad Interior.Color y dicha línea de código la incluiremos en el evento Workbook_SheetSelectionChange y además insertaremos algunas instrucciones adicionales para el buen funcionamiento de nuestra macro.
La primera línea es útil para atrapar cualquier error al momento de restablecer el color original de la celda. Generalmente existe un error cuando eliminamos una fila o una columna completa de nuestra hoja, pero con la sentencia On Error Resume Next evitaremos dicho error.
La segunda línea es la que restablece el color de la celda activa anterior con su color original y en la siguiente línea guardaremos el color de relleno de la celda activa para una futura modificación. Una vez que hemos hecho los cambios con los colores, en la cuarta línea haremos el cambio de color de la celda activa con la función RGB. La última línea de código guardará en la variable CeldaAnterior la referencia a la celda activa para futuros cambios.
Evitar guardar el color de relleno
La última línea de código que agregaremos será para el evento Workbook_BeforeSave y será útil para evitar guardar la celda activa con el color con el que la hemos rellenado. Si no pusiéramos esta línea de código, cada vez que guardemos el libro de Excel, la celda que estaba activa en ese momento quedará con el color de relleno de manera permanente y no podremos regresar a su color original. La línea de código es la siguiente:
De esta manera, antes de guardar el libro, restablecemos el color original de la celda activa y evitamos guardar dicha celda con el color de resalte.
Macro para resaltar la celda activa
A continuación colocaré el código completo que hemos generado hasta ahora y que nos servirá para resaltar la celda activa en Excel. Si lo deseas puedes copiar y pegar este código dentro de la sección ThisWorkbook de tu libro de trabajo.
Private Sub Workbook_Open() ColorAnterior = ActiveCell.Interior.Color Set CeldaAnterior = ActiveCell End Sub Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) On Error Resume Next CeldaAnterior.Interior.Color = ColorAnterior ColorAnterior = ActiveCell.Interior.Color ActiveCell.Interior.Color = RGB(153, 204, 0) Set CeldaAnterior = ActiveCell End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) CeldaAnterior.Interior.Color = ColorAnterior End Sub
Recuerda que además de este código será necesario agregar las variables globales dentro del módulo tal como lo mostré al principio del artículo. Si este código lo estás insertando en tu propio libro de Excel, entonces será necesario que cierres el libro y lo vuelvas a abrir de manera que las variables se inicialicen correctamente o de lo contrario se desplegarán mensajes de error.
Probar la macro que resalta la celda activa
Ahora probaremos nuestro código VBA sobre varios rangos de datos que tienen un formato establecido, de manera que se resalte la celda activa con un color diferente y que además al momento de seleccionar una nueva celda se restablezca el formato anterior de la celda. En la siguiente animación puedes ver el comportamiento de nuestro código:
Con el código que hemos desarrollado en este artículo tendrás la posibilidad de habilitar tus libros para resaltar la celda activa en Excel. Puedes copiar el código que he publicado en la sección anterior o puedes descargar el libro de trabajo para copiar el código directamente del archivo y probar con los datos de ejemplo.
Artículos relacionados
Cómo resaltar la fila de la celda activa en Excel