Habilitar autofiltro en hoja protegida con macro

Tengo la siguiente macro para proteger una hoja del excel cuando se le da guardar, pero no me habilita los autofiltros, quisiera ver si hay que agregar algo más a la macro para que cuando se guarde, y se abra, se puedan utilizar los autofiltros sin necesidad de desproteger la hoja.

Adjunto la macro que estoy utilizando:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If MsgBox("Autoproteger el archivo?", vbYesNoCancel) = vbYes Then
Sheets("Registro Guanacaste").Protect ("gst19")
End If
End Sub

Si me puedieran ayudar.

Respuesta
1

Puedes encender la grabadora de macros, luego proteger la hoja con todas las opciones que necesites. Al detener la grabadora encontrarás en un módulo las instrucciones,

Si solo se trata de mantener la opción de filtrar con esta instrucción alcanza:

Sheets("Registro Guanacaste").Protect ("gst19"), AllowFiltering:=True

Nota: los filtros ya deben estar colocados en los títulos.

Muchas gracias por la respuesta Elsa, probé como me dijiste arriba agregando AllowFiltering:=True pero a la hora de darle guardar el archivo no se protege, y los filtros si se pueden usar, adicional grabe una macro para ver como sale el código, lo que hice fue guardar el archivo, lo desprotegi, y luego filtre:

Sub prueba()
'
' prueba Macro
'

'
ActiveWorkbook.Sabe
ActiveSheet.Unprotect
ActiveSheet.ListObjects("Tabla224").Range.AutoFilter Field:=7, Criteria1:= _
"Back up Guanacaste - Nicoya, Santa Cruz"
End Sub

Me dio esto. Si me pudieras ayudar. Muchas gracias

La instrucción que te pasé es correcta para la macro que dejaste en tu consulta inicial:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If MsgBox("Autoproteger el archivo?", vbYesNoCancel) = vbYes Then
    Sheets("Registro Guanacaste").Protect ("gst19"), AllowFiltering:=True
End If
End Sub

Probala y verás que se protege y te permite filtrar manualmente.

Pero para utilizar el autofiltro dentro de otra macro lo que debes hacer es desproteger la hoja, filtrar y volver a proteger.

Sub prueba()
'
' prueba Macro
ActiveSheet.Unprotect "clave"
ActiveSheet.ListObjects("Tabla224").Range.AutoFilter Field:=7, Criteria1:= _
"Back up Guanacaste - Nicoya, Santa Cruz"
ActiveSheet.Protect "clave", AllowFiltering:=True
End Sub

Lo mismo si, dentro de otra macro, quisieras mostrar nuevamente toda la tabla:

If ActiveSheet.FilterMode = True Then
    With ActiveSheet
        .Unprotect "clave"
        .ShowAllData
        .Protect "clave", AllowFiltering:=True
    End With
End If

Sdos!

Buenas tardes! Mira, puse el código como me indicas:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If MsgBox("Autoproteger el archivo?", vbYesNoCancel) = vbYes Then
Sheets("Registro ZA-ZN").Protect ("za-zn19"), AllowFiltering = True
End If
End Sub

Pero le doy guardar, y los filtro no se habilitan, adicional tengo un botón fue de la tabla para poder modificar sin necesidad de destroteger la hoja, no se si eso afecta, esta es la macro del botón para habilitar la modificación:

Sub habilitarza_zn()
Sheets("Registro ZA-ZN").Unprotect "za-zn19"
End Sub

Tenía otro botón para proteger todo, pero como a la hora de guardar ya lo protege, lo deseche.

Espero me puedas ayudar.

Muchas gracias

Quizás te estés olvidando de esta nota:

Nota: los filtros ya deben estar colocados en los títulos antes de proteger la hoja.

Ahora, mencionas: tengo un botón fue de la tabla para poder modificar sin necesidad de destroteger la hoja

En realidad la macro sí te desprotege la hoja... pero esas instrucciones podrías dejarlas dentro de la misma macro de filtrado, como te dejé en Sub Prueba()

En cambio si filtras manualmente no será necesario desproteger la hoja habiendo hecho lo que te indico en NOTA.

Y como la hoja siempre estará protegida (por lo menos en estos procesos) no creo que sean necesarias las instrucciones del evento BeforeSave. Aunque no están de más.

Puedes enviarme tu libro a alguno de mis correos que aparecen en la imagen o dejarme el tuyo para enviarte un ejemplo.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas