Código para proteger todas la hoja a la vez y no interferir con las macros.

01/11/2006 - 21:56 por ~ jose ~ | Informe spam
Hola, que tal?

Necesito un código para proteger todas las hojas de un libro con la
misma contrase#a y que al ejecutar las macros no tenga que incluir en
cada una de ellas el código para desproteger la hoja y al terminar la
macro poner otro código para protegerla.

Estoy probando este código en el el módulo del libro:

Private Sub Workbook_Open()
For Each ws In Worksheets
ws.Protect Password:="clave", userinterfaceonly:True
Next ws
End Sub

pero al ejecutar esta macro (de la 'hoja5') me dá error, se me detiene
en el la parte que os marco:

Private Sub Worksheet_Activate()
Application.ScreenUpdating = False
Application.EnableEvents = False
ActiveWindow.FreezePanes = False
Range("B:D,G:L,N:W").EntireColumn.Hidden = False
[b10].CurrentRegion.EntireRow.Delete

' DESDE AQUI ME DA EL ERROR
Sheets("Almacén").UsedRange.AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=Sheets("Almacén").[T1:T2], _
CopyToRange:=[b10], _
Unique:=False
' HASTA AQUI ME DA EL ERROR

' aqui sigue mas código

Si es mejor proteger todas la hojas una por una manualmente no me
importa, lo más importante es que pueda ejecutar cualquier código con
la hoja protegida.

Si os hace falta algún dato más...
Venga, gracias, un saludo
jose

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
02/11/2006 - 01:19 | Informe spam
hola, jose !

Mostrar la cita
1) en la seccion de codigo que expones, no se alcanza a apreciar alguna causa posible de erro/des/re/proteccion de hojas -?-
salvo [supongo al copiar/pegar a la consulta] la instruccion en el evento '_open' con el 'userinterfaceonly:True'
-> donde le hace falta el signo '=' -> UserInterfaceOnly:=True

2) la posible 'des-proteccion' de una hoja [despues del evento '_open'] podria ocurrir...
[hasta donde se]... SOLO si se insertan filas/columnas nuevas nuevas en la hoja 'protegida' -?-

3) no se alcanza a apreciar cual es el sentido de la instruccion: -> Application.EnableEvents = False
en el evento '_activate' de la hoja donde se presenta el error -???-

4) [preguntas]:
- si dejaras la hoja 'desprotegida'... el codigo ya no te mandaria el error que mencionas -???-
- que mandaste a la basura con la instruccion: -> [b10].CurrentRegion.EntireRow.Delete -???-
- de cuantas columnas estamos hablando en la parte que dice: -> Sheets("Almacen").UsedRange.AdvancedFilter -???-
[es probable que necesites de un '.Resize' para depositar los resultados en: -> CopyToRange:=[b10].RESIZE(...) -???-

comentas [si hubiera] algun detalle mas... 'descriptivo' ?
saludos,
hector.

__ el resto de la consulta __
Mostrar la cita
#2 ~ jose ~
02/11/2006 - 21:43 | Informe spam
Hola Hector,

Mostrar la cita
Si, tienes razón, me faltaba de poner en el post el signo "=", pero en
el VB lo habia puesto.

Mostrar la cita
Tengo filas que se eliminan y nuevas que se pegan (no creo que se
inserten, creo que solo se pegan)

Mostrar la cita
Esto es porque el código hace referencia a la hoja 'Almacén' la cual
tiene también el evento '_activate' y con esta linea creia que así no
se activaria el evento, estoy en lo cierto?

Mostrar la cita
No, estando la hoja desprotegida no me dá error alguno, pero si guardo
el libro sin proteger la hoja al abrir el libro el evento '_open' me
protege la hoja y estamos en las mismas.

Mostrar la cita
Elimino todas las filas que he copiado anteriormente con este código:
Mostrar la cita
Hace el filtro en 21 columnas y un total de 3680 filas

Mostrar la cita
No conozco el '.Resize', no lo he empleado nunca ni se que hace, pero
de todas formas por ahi no van mis inquietudes (creo), dado que si
está sin proteger ninguna hoja me funciona todo a la perfección.

Lo que me gustaria seria proteger las hojas del libro con clave y que
todo lo que haga mediante código corriera bien.
Si para eso tengo que proteger hoja por hoja manualmente, no me
importa.

Gracias y un saludo
jose
#3 Héctor Miguel
03/11/2006 - 00:03 | Informe spam
hola, jose !

Mostrar la cita
=> si la hoja NO es 'activada'... el evento '_activate' tampoco se dispara ;)

Mostrar la cita
=> [al parecer] la administracion de los filtros avanzados 'entre hojas' por codigo presenta [ademas] otros 'imponderables'
para no hacer el cuento largo... prueba a des/re/proteger la hoja al momento de 'pasar' los filtros avanzados de una hoja a otra...

=> puedes conservar lo del evento '_open' del libro [por si hubiera mas acciones menos 'agresivas' en otras partes del codigo] :))
=> lo que si... no se que tan 'conveniente' pudiera resultar el seguir usando el 'UsedRange' de la hoja donde filtras en avanzados -?-
ya que segun comentas, se trata de ~21 columnas, que si suponemos inician en 'A' se extienden hasta la columna 'U'
la cual YA incluye a la columna 'T' que es donde estableces los criterios en sus filas 1 y 2 [probablemente 'T1' esta vacia] -???-

prueba con las siguientes adaptaciones... [solo para el evento '_activate' de la hoja a donde se pasa el resultado de los filtros avanzados]

[b10].CurrentRegion.EntireRow.Delete
Me.Unprotect "clave"
Sheets("Almacén").Range("a1").CurrentRegion.AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=Sheets("Almacén").[t1:t2], _
CopyToRange:=[b10], _
Unique:=False
Me.Protect "clave", True, True, True, True

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Ads by Google
Search Busqueda sugerida