Esconder filas excel según valor

Tengo el siguiente macro en un excel:

Sub esconderfilas()

If Range("m19").Value = "0" Then
Rows("29:30").EntireRow.Hidden = True ' Si pone None oculta
Else
Rows("29:30").EntireRow.Hidden = False ' Si no lo pone las desoculta.
End If

If Range("m19").Value = "0" Then
Rows("40").EntireRow.Hidden = True ' Si pone None oculta
Else
Rows("40").EntireRow.Hidden = False ' Si no lo pone las desoculta.
End If

End Sub

El problema que tengo es que no lo ejecuta de forma automática, he tenido que ponerle un botón para que aplique el macro y me encuentro con otro problema, que como la hoja donde se tiene que aplicar está protegida, al darle al botón me sale una ventanita Microsoft Visual Basic para Aplicaciones X400 y no lo hace. Me toca dejarla sin proteger y no es posible dejar esa hoja desprotegida.

¿Alguna solución?

2 respuestas

Respuesta
1

[Hola 

Te paso la macro si desea en forma automática, pon la macro en Worksheet_Change de la hoja

Private Sub Worksheet_Change(ByVal Target As Range)
'VALORA LA RESPUESTA PARA FINALIZAR
'
'
    If Not Intersect(Target, Range("M19")) Is Nothing Then
        Sheets("Hoja1").Unprotect 123 ' desprotege la hoja1 clave 123
        If Target = 0 Then ' si es cero oculta
            Rows("29:30").Hidden = True
            Rows("40:40").Hidden = True
        ElseIf Target = "1" Then ' si es 1 muestra la fila
            Rows("29:30").Hidden = False
            Rows("40:40").Hidden = False
        End If
        Sheets("Hoja1").Protect 123  '  protege la hoja1  clave 123
    End If
End Sub

He  puesto  eso, cambiando  Hoja1  por  Hoja 7 que es donde  lo tengo que aplicar y no hace  nada

[Hola 

Quizá lo copiaste en un modulo, copia en la misma hoja7 y también sustituye la clave 123 que tiene tu hoja

Enlace de ejemplo

https://www.dropbox.com/s/sp6rxta06vupeui/prueba.xlsm?dl=0 

Respuesta

Necesitas primero desproteger la macro, ocultar las celdas y proteger de nuevo la macro y esto se hace así

Sub proteger()
With Hoja1
    .Unprotect Password:="12345"
    Union(Range("a29:a30"), Range("a40")).EntireRow.Hidden = Range("m19") = 0
    .Protect Password:="12345"
End With
End Sub

como ves no uso if este ya esta integrado en la orden para ocultar o mostrar las filas, si m19=0 te ocultara las filas 30, 29 y 40 en un solo paso

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas