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:
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:
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:
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:
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
Deja una respuesta