Macro que ejecute cuando cambie valor de celda

Me pueden ayudar a que la siguiente macro solo se ejecute cuando se cambie el valor de la celda K16 (Es una lista desplegable con los valores "CASADO" y "SOLTERO").

El código me funciona a la perfección, pero cada vez que edito otra celda de la hoja me vuelva a la celda K16 y esto es bastante molesto.

Muchas gracias!

Private Sub Worksheet_Change(ByVal Target As Range)

Set Target = Range("K16")

If Target.Value = "CASADO" Then
Rows("21:31").Select
Selection.EntireRow.Hidden = False
ActiveSheet.Range("K16").Select
Else
Rows("21:31").Select
Selection.EntireRow.Hidden = True
ActiveSheet.Range("K16").Select
End If

End Sub

Respuesta
3

Te comparto la siguiente opción:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address(0, 0) = "K16" Then
    Rows("21:31").Hidden = Target.Value <> "CASADO"
    Range("K16").Select
  End If
End Sub

En esta comparación:

Target.Value <> "CASADO"

Si escribes "SOLTERO", compara "SOLTERO" <> "CASADO", como es diferente, entonces la condición regresa TRUE.

Rows("21:31").Hidden = TRUE

El caso contrario, regresa FALSE.


Te invito a ver más sobre las mejores prácticas en Excel y Macros en mi canal de YouTube:

https://www.youtube.com/channel/UCs644-v3ti4SF7zE_bt_YXA 

¡Gracias estimado! Te he escrito un mensaje en tu canal. Excelentes guías! Y te repito la consulta, ¿no tiene más el correo @yahoo verdad? Me gustaría volver a contactar con usted. Saludos, Christian.

[Ho la Christian Viarnes 

Sí, todavía tengo mi correo de yahoo:

[email protected]

Con todo gusto nos contactamos.

1 respuesta más de otro experto

Respuesta
4

Lo primero que hay que establecer en estos eventos, es cuál o cuáles serán las celdas a controlar. En tu caso solo K16 por el momento.

Private Sub Worksheet_Change(ByVal Target As Range)
'solo se controla la celda K16
If target.address <> "$K$16" then Exit Sub
If Target.Value = "CASADO" Then
   Rows("21:31").EntireRow.Hidden = False     'no es necesario seleccionar el rango
   Range("K16").Select     '* No es necesario 'activesheet'. ver nota 
Else
   Rows("21:31").EntireRow.Hidden = True
   Range("K16").Select   '* ver nota
End If
End Sub

*Nota: quizás no debieras volver a seleccionar la celda K16, sino dejar que la selección sea la predeterminada en tu hoja. A derecha o hacia abajo. Sino podrías indicar otra celda en especial.

Te invito a mirar los videos N° 51-Eventos de Hoja y el N° 11-Mejoras en código VBA

¡Muchas Gracias Elsa! Funciono de maravillas. Voy a mirar los videos que me recomiendas. Ya que lo que hice fue utilizando la opción de grabar.

Si utilizas la Grabadora de macros, te interesará ver también el video N° 62 ;)

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas