En esta lección vas a aprender a usar el evento Change y el método Intersect en VBA. De esta forma, vas a poder lanzar el código de programación al cambiar el contenido de una determinada celda o un rango de ellas.
Hasta ahora habíamos asociado macros a botones, y las habíamos ejecutado al pulsar sobre ellos. Esto está bien para ejecutar programas en un momento determinado, pero hay diversas situaciones donde queremos que se ejecuten acciones de manera automática al cambiar el valor de una determinada celda. Esta posibilidad nos la proporciona el evento Change de Worksheet.
Por otro lado, el método Intersect no es más que la herramienta que va a determinar si la celda que hemos modificado pertenece al rango de “vigilancia” que hemos establecido para lanzar nuestro código.
En primer lugar, vemos su sintaxis:
'Target: Contiene la celda a la cual se cambia
If Application.Intersect(Target, Range("E4")) Is Nothing Then
Exit Sub
Else
(Líneas de código a ejecutar)
End If
End Sub
La traducción comando a comando sería:
Ejecuta el código si hay algún cambio en la página.
Private Sub Worksheet_Change (ByVal Target As Range)
Si la celda que hemos modificado (Target) NO es la E4, salimos sin hacer nada.
Exit Sub
Else
(Líneas de código a ejecutar)
En caso contrario, ejecuta el código que programemos.
Seguidamente, veremos un ejemplo para comprender el abanico de posibilidades que se nos abren con el evento Change y el método Intersect de VBA.
Primero, crea un libro nuevo y abre el editor VBA. Hasta ahora habíamos insertado módulos, pero para vigilar si en una hoja se realizan cambios, hay que programar directamente sobre ella.
Después, haz click en el objeto Hoja1 (Hoja1) en la columna izquierda, tal y como se ve en la figura.
A continuación, pega el siguiente código.
'Macro que al rellenar la distancia, si es superior a 200km, rellena en rojo el nombre de la ciudad
'Si varía algún valor de la 2ª columna
If Target.Column = 2 Then
'Guarda en la variable ThisRow el valor de la fila
ThisRow = Target.Row
'Si además, la distancia es superior a 200km, rellena de rojo la celda de la ciudad
On Error GoTo final
If Target.Value > 200 Then
Range("A" & ThisRow).Interior.ColorIndex = 3
Else
Range("A" & ThisRow).Interior.ColorIndex = xlColorIndexNone
End If
End If
final:
End Sub
Ahora rellena la hoja de cálculo como se muestra en la figura.
En el ejemplo, he rellenado las distancias que existen desde la ciudad de Lorca a las ciudades del listado. Así, conforme vamos rellenando distancias, si alguna supera los 200km, automáticamente se rellenará de rojo la celda que contiene el nombre de la ciudad.
Sobre todo, recuerda que Target siempre hace referencia a la celda que está siendo modificada, de esta manera,
If Target.Column = 2 Then
Significa, que si la columna modificada es la segunda, entonces….
ThisRow = Target.Row
Guarda en la variable ThisRow el valor de la fila de la celda que está siendo modificada
If Target.Value > 200 Then
Significa, que si el valor de la celda modificada es superior a 200, entonces….
Con esto llegamos al final de la vigesimosegunda lección en la que has aprendido a utilizar el evento Change y el método Intersect en VBA.
Por último, invitarte a compartir tus dudas en los comentarios o en el foro, y a darle clic a la publicidad de abajo para ayudarme a seguir creando contenido.
Nos vemos en el próximo capítulo.
Descarga el archivo del ejemplo
Por favor, haz clic en el anuncio y ayúdame a seguir creando contenido. Solo te lleva un segundo 😉
« L21. Trabajar con distintas hojas y libros con macros.
L23. Enviar emails con macros (Lotus). »
0 comentarios