Ejecutar macros al seleccionar celdas en Excel
En este artículo veremos y entenderemos cómo escribir una macro para que cuando se seleccione una celda en Excel se ejecute una macro. Incluso veremos cómo adecuar el código de la macro para que podamos elegir celda no adyacentes, es decir, que no sean del mimos rango, sino de rangos diferentes.
En resumen, usaremos el evento SelectionChange para detectar cuando se seleccione una celda, y con el método Insersect detectaremos si la celda elegida cruza con el rango que definimos en la macro.
Entendiendo el evento SelectionChange
Los eventos se ejecutan cuando sucede algo en Excel. Una hoja de cálculo tiene, entre otros eventos, el evento SelectionChange que ejecutará una macro al haber una cambio en una celda, por ejemplo cuando se selecciona una celda o se presiona [Enter] después de ingresar una fórmula o un valor en una celda.
Entendiendo el Método Intersect
El método que usaremos en nuestro código vba es el método Instersect, la cual nos ayudará a indicarnos si se da una intersección entre rangos, y para nuestro ejemplo si el rango elegido intersecta con el rango elegido.
Ver video Ejecutar macro al seleccionar celda en Excel
Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.
Mostrar mensaje al elegir una celda en Excel
En la Figura 1 tenemos 3 rangos donde deseamos que al elegir cualquier celda de ellos, se lance un mensaje.
Figura 1. Se mostrará un mensaje al elegir alguna celda de fondo azul.
Lo primero que debemos hacer es definir el lugar donde escribiremos la macro. El lugar de la macro será en un Módulo de hoja:
-
Damos clic derecho en la pestaña de la Hoja1 (o que aplique a tu archivo).
-
Se mostrará el Módulo de la Hoja1 para escribir la macro.
-
Desplegamos el Combo donde dice (General) y elegimos Worksheet.
Al elegir Worksheet se insertará automáticamente una macro donde se manda a llamar al evento SelectionChange. La macro es la siguiente:
Option Explicit Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub
Figura 2. El evento SelectionChange detectará cambios en la Hoja1.
Ahora, en el evento SelectionChange le diremos a Excel que si elegimos alguna celda del rango “A10:A17” se ejecute un mensaje. Como vimos anteriormente, lo haremos con el método Intersect.
Option Explicit 'EXCELeINFO 'MVP Sergio Alejandro Campos 'http://www.exceleinfo.com 'https://www.youtube.com/user/sergioacamposh Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim CeldaActual As String CeldaActual = ActiveCell.Address 'Si se elige una celda entre el rango A10:A17 If Not Intersect(Target, Range("A10:A17")) Is Nothing Then 'Se muestra un mensaje indicando la celda elegida MsgBox "Has seleccionado la celda " & CeldaActual, vbInformation, "EXCELeINFO" End If End Sub
Ahora bien si deseamos que los rangos sean no adyacentes, entonces modificaremos la siguiente línea definiendo varios rangos:
'Si se elige una celda entre el rango A10:A17, B10 y D10:D21 If Not Intersect(Target, Range("A10:A17, B10, D10:D21")) Is Nothing Then
Figura 3. Mostramos mensaje al elegir una celda de Excel.
Referencias
En todos estos artículos hemos usado el método Intersect.
Descargar el ejemplo
EXCELeINFO – Ejecutar macros al seleccionar celdas en Excel.zip