Lección 22: Evento Change de Worksheet y el método Intersect en macros.

Escrito por Administrador

24 de agosto de 2021

En esta lección vas a aprender a 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 botones a macros, y las habíamos ejecutado al pulsar sobre ellos. Esto está bien para ejecutar programas a demanda, es decir, cuando queremos, 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. La sintaxis general sería así:

Private Sub Worksheet_Change (ByVal Target As Range)

'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.

If Application.Intersect(Target, Range("E4")) Is Nothing Then

Exit Sub

Else

(Líneas de código a ejecutar)

En caso contrario, ejecuta el código que programemos.

Vamos a ver un ejemplo para comprender el abanico de posibilidades que se nos abren con esta nueva herramienta.

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.

Haz click en el objeto Hoja1 (Hoja1) en la columna izquierda, tal y como se ve en la figura.

total-operaciones-matematicas-macros

Aquí hay que pegar el siguiente código.

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

'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.

total-operaciones-matematicas-macros

En el ejemplo, he rellenado las distancias que existen desde la ciudad de Lorca a las ciudades del listado. Conforme vamos rellenando distancias, si alguna supera los 200km, automáticamente se rellenará de rojo la celda que contiene el nombre de la ciudad.

total-operaciones-matematicas-macros

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. Espero que te esté gustando el curso y que me plantees cualquier duda que te surja. También puedes proponerme macros que te interese desarrollar y las voy incluyendo en el temario, soy todo oídos. Nos vemos en el próximo capítulo.

Descarga el archivo del ejemplo

« L21. Trabajar con distintas hojas y libros con macros.

L23. Enviar emails con macros (Lotus). »

0 comentarios

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Quizá te interese,

Contacto