Problema de Filtro con macro

05/10/2004 - 18:51 por Daniel | Informe spam
Encontre el sgte. codigo en el foro

Sub EsconderFilas()
ActiveSheet.Unprotect "miclave" 'Desprotege
Application.ScreenUpdating = False
Dim Rango As Range, c As Range

Set Rango = Range("C8:C42")
For Each a In Rango
If a = 0 And a <> vbNullString Then
a.EntireRow.Hidden = True
Else
a.EntireRow.Hidden = False
End If
Next
Application.ScreenUpdating = True
ActiveSheet.Protect Password:="miclave" ' Vuelve a proteger
End Sub


La hoja debe estar siempre protegida, pero permite a los
usuarios utilizar autofiltro pero cuando ejecuto la macro
la hoja sigue protegida pero no puedo utilizar el autofiltro,
hay alguna manera q luego de ejecutar la macro se pueda
seguir con la opcion de autofiltro, para no estar desprotegiendo
la hoja, volver a marcar utilizar autofiltro, como son demasiadas
hojas es mucha perdida de tiempo, espero me puedan ayudar.

Gracias
Daniel Padilla
 

Leer las respuestas

#1 Héctor Miguel
06/10/2004 - 06:03 | Informe spam
hola, Daniel !

Encontre el sgte. codigo en el foro [...]
La hoja debe estar siempre protegida, pero permite a los usuarios utilizar autofiltro
... cuando ejecuto la macro la hoja sigue protegida pero no puedo utilizar el autofiltro
... q luego de ejecutar la macro se pueda seguir con la opcion de autofiltro
... no estar desprotegiendo la hoja, volver a marcar utilizar autofiltro
... son demasiadas hojas es mucha perdida de tiempo [...]



[alg]unas 'observaciones' de la [posible] 'causa' de que 'se pierda' la opcion de los autofiltros...
-> aunque no mencionas en que version/es de excel se utiliza el libro...
el metodo [un]protect tiene 'variaciones' entre 97/2000 y xp/2003
1.- usas una 'simple' instruccion para desproteger [al inicio] y volver a proteger [al final]
->ActiveSheet.Unprotect "miclave" ' Desprotege<-
[ ... mas lineas de codigo ...]
->ActiveSheet.Protect Password:="miclave" ' Vuelve a proteger<-
2.- con la 're-proteccion' [seguramente] se esta cancelando [por 'omision'] el 'permiso de usar autofiltros'
3.- si necesitas que una hoja protegida 'acepte' acciones ->por codigo<- y 'permita' los autofiltros...
en el evento '_open' del libro [y por cada hoja que sea necesario]...
-> usa el metodo 'protect' CON la opcion de 'UserInterfaceOnly:=True'
-> usa la propiedad 'EnableAutoFilter = True'
la 'necesidad' de [no] repetir el password al usar el metodo... dependera de la version utilizada de excel

te expongo algunos ejemplos al final -> todos en el modulo de codigo del libro [ThisWorkbook ?]
saludos,
hector.
Private Sub Workbook_Open()
With Worksheets("Hoja1")
.Protect UserInterfaceOnly:=True
.EnableAutoFilter = True
End With
End Sub

la condicion para que funcione es ... que el AutoFiltro debe 'estar presente' ANTES.
['EnableAutoFilter = True' SOLO 'permite' al usuario su uso [en hojas protegidas], NO su 'creacion']

si la hoja 'en cuestion' NO tiene 'presente' el Autofiltro y lo quieres 'crear' [por codigo] ... [p.e.]

Private Sub Workbook_Open()
With Worksheets("Hoja1")
.Protect UserInterfaceOnly:=True
If Not .AutoFilterMode Then .Range("a1").AutoFilter
.EnableAutoFilter = True
End With
End Sub

si se han de aplicar a todas las hojas de calculo del libro, modifica a lo siguiente:
Private Sub Workbook_Open()
Dim Hoja As Worksheet
For Each Hoja In ActiveWorkbook.Worksheets
Hoja.Protect UserInterfaceOnly:=True
Hoja.EnableAutoFilter:=True
Next
End Sub

si se trata de [solamente] 'ciertas' hojas, puedes modificar a lo siguiente:
For Each Hoja In Worksheets(Array("Hoja1", "Hoja3"))

Preguntas similares