VBA – Detección de cambios en hoja Excel. Target.

Cualquier cambio que realice el usuario lo podremos utilizar para «disparar» una macro que programemos. Incluso antes de que realice un cambio, con una simple selección de una celda determinada. Aquí se muestra el código VBA para que, por ejemplo, salte un mensaje cuando el usuario cambie la casilla D10:

VB
Private Sub Worksheet_Change(ByVal Target As Range)

'¡Fíjate! es Worksheet_Change, NO es Worksheet_SelectionChange

    If Target.Row = 10 And Target.Column = 4 Then
    MsgBox "Has cambiado el valor de la celda D10"
    End If


End Sub

O en este otro caso, cuando el usuario seleccione la casilla D10 saltará un MsgBox de aviso:

VB
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

'¡Cuidado! es Worksheet_SelectionChange, NO es Worksheet_Change

    If Target.Row = 10 And Target.Column = 4 Then
    MsgBox "Has seleccionado la celda D10: "
    MsgBox "Has seleccionado la celda de la fila: " & Target.Row _
    & " y de la columna: " & Target.Column
    'Has seleccionado la celda de la fila: 10 y de la columna 4
    End If


End Sub

Pero, ¿cómo hacemos si queremos «controlar» más de una celda? En este caso tenemos que utilizar la función Intersect. Con el siguiente código controlamos si hay un cambio dentro del rango D10:G20:

VB
Private Sub Worksheet_Change(ByVal Target As Range)
    
    If Not Intersect(Target, Range("D10:G20")) Is Nothing Then
    MsgBox "Hay cambios dentro del rango D10->G20"
    'poner aquí el código que se ejecutará si hay cambios dentro
    'del rango
    End If

End Sub

Si queremos «disparar» la macro cuando se modifique cualquiera de las celdas que están fuera del rango D10:G20 lo haremos con este código, simplemente quitando la palabra Not:

VB
Private Sub Worksheet_Change(ByVal Target As Range)
    
    If Intersect(Target, Range("D10:G20")) Is Nothing Then
    MsgBox "Hay cambios Fuera del rango D10->G20"
    'poner aquí el código que se ejecutará si hay cambios dentro
    'del rango
    End If

End Sub

Publicado

en

por

Etiquetas:

Comentarios

Deja una respuesta

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