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 !

Necesito un codigo 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 codigo para desproteger la hoja
y al terminar la macro poner otro codigo para protegerla.



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 __
Estoy probando este codigo en el el modulo 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("Almacen").UsedRange.AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=Sheets("Almacen").[T1:T2], _
CopyToRange:=[b10], _
Unique:=False
' HASTA AQUI ME DA EL ERROR
' aqui sigue mas codigo
Si es mejor proteger todas la hojas una por una manualmente no me importa
lo mas importante es que pueda ejecutar cualquier codigo con la hoja protegida...
Respuesta Responder a este mensaje
#2 ~ jose ~
02/11/2006 - 21:43 | Informe spam
Hola Hector,

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


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


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' -?-


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

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 -???-


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?

4) [preguntas]:
- si dejaras la hoja 'desprotegida'... el codigo ya no te mandaria el error que mencionas -???-


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.

- que mandaste a la basura con la instruccion: -> [b10].CurrentRegion.EntireRow.Delete -???-


Elimino todas las filas que he copiado anteriormente con este código:
> Sheets("Almacen").UsedRange.AdvancedFilter _
> Action:=xlFilterCopy, _
> CriteriaRange:=Sheets("Almacen").[T1:T2], _
> CopyToRange:=[b10], _
> Unique:=False

- de cuantas columnas estamos hablando en la parte que dice: -> Sheets("Almacen").UsedRange.AdvancedFilter -???-


Hace el filtro en 21 columnas y un total de 3680 filas

[es probable que necesites de un '.Resize' para depositar los resultados en: -> CopyToRange:=[b10].RESIZE(...) -???-


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
Respuesta Responder a este mensaje
#3 Héctor Miguel
03/11/2006 - 00:03 | Informe spam
hola, jose !

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 -???-


Esto es porque el codigo hace referencia a la hoja 'Almacen' la cual tiene tambien el evento '_activate'
y con esta linea creia que así no se activaria el evento, estoy en lo cierto?



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

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



=> [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.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida