Realizar una acción en VBA cuando cambie el valor de una celda

He estado probando cómo conseguir que, mediante VBA, cuando cambie el valor de una celda, y solo en ese caso, se produzca una acción concreta, por ejemplo, ocultar una fila. Si lo hago con Worksheet_Change, me "re-calcula" cada vez que hay un cambio en la hoja.

Por ejemplo, para que me entendáis, tengo este código:

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.ScreenUpdating = False
    ActiveSheet.Unprotect
    If Range("W4").Value = "OCULTAR" Then
    Rows("4:4").EntireRow.Hidden = True ' Si pone None oculta
    Else
    Rows("4:4").EntireRow.Hidden = False ' Si no lo pone las desoculta.
    End If
    If Range("W5").Value = "OCULTAR" Then
    Rows("5:5").EntireRow.Hidden = True ' Si pone None oculta
    Else
    Rows("5:5").EntireRow.Hidden = False ' Si no lo pone las desoculta.
    End If
    If Range("W6").Value = "OCULTAR" Then
    Rows("6:6").EntireRow.Hidden = True ' Si pone None oculta
    Else
    Rows("6:6").EntireRow.Hidden = False ' Si no lo pone las desoculta.
    End If
    If Range("W7").Value = "OCULTAR" Then
    Rows("7:7").EntireRow.Hidden = True ' Si pone None oculta
    Else
    Rows("7:7").EntireRow.Hidden = False ' Si no lo pone las desoculta.
    End If
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowSorting:=True, AllowFiltering:=True
End Sub
Respuesta
1

El evento debe ser ejecutado solo al cambio de la celda activa, o sea Target.

La macro sería así:

Private Sub Worksheet_Change(ByVal Target As Range)
'x Elsamatilde
    Application.ScreenUpdating = False
    ActiveSheet.Unprotect
'ejecutar solo al cambio en col W  .... opcional: agregar otras col
If Target.Column <> 23 Then Exit Sub
'se ejcuta a partir de fila 4 ....... opcional: fijar un límite de filas
If Target.Row < 4 Then Exit Sub
If Target.Value = "OCULTAR" Then
    Target.EntireRow.Hidden = True
Else
    Target.EntireRow.Hidden = False
End If
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowSorting:=True, AllowFiltering:=True
End Sub

Muchas gracias, Elsa. El cambio se produce en una celda que no está activa. Es decir, es una fórmula que evalúa y da un resultado. No sé si eso variará la macro. Si quieres, te puedo pasar el Excel. Me interesa arreglar esto porque me da saltos en la ventana que creo que es por esto.

Mis correos aparecen en mi sitio que dejó al pie de mis respuestas. Podés utilizar el de cibersoft. Arg de Gmail.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas