Utilizar macros sin tener que desproteger la hoja.

27/11/2005 - 14:02 por ~ jose ~ | Informe spam
Hola. Tengo una hoja protegida pero cada vez qeu creo una macro
tengo que insertar el código:
ActiveSheet.Unprotect
para descativar la hoja,
y para poder proteger la hoja al final de la macro tengo qeu poner:
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True
Hay alguna forma de no desproteger la hoja y poder utilizar las macros
sin tener que poner estos codigos en cada macro qeu cree?
Gracias

Preguntas similare

Leer las respuestas

#1 luis
27/11/2005 - 14:59 | Informe spam
userinterfaceonly

"~ jose ~" escribió en el mensaje
news:
Hola. Tengo una hoja protegida pero cada vez qeu creo una macro
tengo que insertar el código:
ActiveSheet.Unprotect
para descativar la hoja,
y para poder proteger la hoja al final de la macro tengo qeu poner:
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True
Hay alguna forma de no desproteger la hoja y poder utilizar las macros
sin tener que poner estos codigos en cada macro qeu cree?
Gracias
Respuesta Responder a este mensaje
#2 KL
27/11/2005 - 19:18 | Informe spam
Tal como dice Luis, en el modulo de ThisWorkbook creas un macro que captura
el evento de apertura del libro, mas o menos asi:

'en este caso se protegen todas las hojas del libro.
Private Sub Workbook_Open()
Worksheets("Hoja1").Protect userinterfaceonly:=True
End Sub

o bien

'en este caso se protegen todas las hojas del libro.
Private Sub Workbook_Open()
For Each ws In Worksheets
ws.Protect userinterfaceonly:=True
Next ws
End Sub

o bien

'en este caso se protegen las hojas seleccionadas por su indice.
Private Sub Workbook_Open()
ws = Array(1, 3)
For i = 0 To UBound(ws)
Worksheets(ws(i)).Protect userinterfaceonly:=True
Next i
End Sub

o bien


'en este caso se protegen las hojas seleccionadas por su nombre.
Private Sub Workbook_Open()
ws = Array("Hoja1", "Hoja3")
For i = 0 To UBound(ws)
Worksheets(ws(i)).Protect userinterfaceonly:=True
Next i
End Sub

Este codigo no afecta las claves ya esteblecidas para las hojas protegidas y
protege sin clave las que no estaban protegidas (si quieres establecer clave
u otras opciones, simplemente añade los argumentos relevantes). Es necesario
asociar el codigo al evento Open del libro poque la opcion userinterfaceonly
no se guarda al cerrar el libro.

Saludos,
KL


"~ jose ~" wrote in message
news:
Hola. Tengo una hoja protegida pero cada vez qeu creo una macro
tengo que insertar el código:
ActiveSheet.Unprotect
para descativar la hoja,
y para poder proteger la hoja al final de la macro tengo qeu poner:
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True
Hay alguna forma de no desproteger la hoja y poder utilizar las macros
sin tener que poner estos codigos en cada macro qeu cree?
Gracias
Respuesta Responder a este mensaje
#3 KL
27/11/2005 - 19:24 | Informe spam
fe de erratas (ya empezamos otra vez :-O)

el comentario al primer macro debe decir:
"'en este caso se protege una hoja concreta."

Saludos,
KL

"KL" wrote in message
news:%
Tal como dice Luis, en el modulo de ThisWorkbook creas un macro que
captura el evento de apertura del libro, mas o menos asi:

'en este caso se protegen todas las hojas del libro.
Private Sub Workbook_Open()
Worksheets("Hoja1").Protect userinterfaceonly:=True
End Sub

o bien

'en este caso se protegen todas las hojas del libro.
Private Sub Workbook_Open()
For Each ws In Worksheets
ws.Protect userinterfaceonly:=True
Next ws
End Sub

o bien

'en este caso se protegen las hojas seleccionadas por su indice.
Private Sub Workbook_Open()
ws = Array(1, 3)
For i = 0 To UBound(ws)
Worksheets(ws(i)).Protect userinterfaceonly:=True
Next i
End Sub

o bien


'en este caso se protegen las hojas seleccionadas por su nombre.
Private Sub Workbook_Open()
ws = Array("Hoja1", "Hoja3")
For i = 0 To UBound(ws)
Worksheets(ws(i)).Protect userinterfaceonly:=True
Next i
End Sub

Este codigo no afecta las claves ya esteblecidas para las hojas protegidas
y protege sin clave las que no estaban protegidas (si quieres establecer
clave u otras opciones, simplemente añade los argumentos relevantes). Es
necesario asociar el codigo al evento Open del libro poque la opcion
userinterfaceonly no se guarda al cerrar el libro.

Saludos,
KL


"~ jose ~" wrote in message
news:
Hola. Tengo una hoja protegida pero cada vez qeu creo una macro
tengo que insertar el código:
ActiveSheet.Unprotect
para descativar la hoja,
y para poder proteger la hoja al final de la macro tengo qeu poner:
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True
Hay alguna forma de no desproteger la hoja y poder utilizar las macros
sin tener que poner estos codigos en cada macro qeu cree?
Gracias


Respuesta Responder a este mensaje
#4 ~ jose ~
27/11/2005 - 21:46 | Informe spam
Mmmmmya lo provaré, no se si lo tengo muy claro pero cuado lo
pruebe seguro que me entero un poco mas, pero por aclarar un poco esto,
con estos códigos lo que consigo es tener simpre las hojas (que yo
elija) protegidas y aunque una macro necesite desproteger la hoja (por
ejemplo para copiar y pegar unas celdas) no tenga que meter el código
de desproteger hoja en la macro para desprotegerla y luego al final de
la macro otra vez otro codigo para protegerla, es eso lo que hace esto
que me habeis dado, no???
Y ya por complicar un poco mas la cosa, y si en algunas hojas (no
todas) les quisiera meter contraseña?
Venga, un saludo.
Respuesta Responder a este mensaje
#5 KL
27/11/2005 - 22:11 | Informe spam
Hola jose,

una macro necesite desproteger la hoja (por
ejemplo para copiar y pegar unas celdas)



esto solo es cierto si la opcion "userinterfaceonly" del metodo Protect esta
en FALSE.

no tenga que meter el código
de desproteger hoja en la macro para desprotegerla y luego al final de
la macro otra vez otro codigo para protegerla, es eso lo que hace esto
que me habeis dado, no???



Efectivamente. Mientras que para el usuario todo permanecera protegido, para
los macros no lo sera.

Y ya por complicar un poco mas la cosa, y si en algunas hojas (no
todas) les quisiera meter contraseña?



Te sugiero que vuelvas a leer mi respuesta - ahi lo tienes todo.

- proteges las hojas que quieras con las contrasenas que quieras
- colocas uno de los codigos que solo afectan hojas selectas como el
siguiente (los nombres de hojas corresponderan a las que has protegido con
contrasena):

Private Sub Workbook_Open()
ws = Array("Hoja1", "Hoja3")
For i = 0 To UBound(ws)
Worksheets(ws(i)).Protect userinterfaceonly:=True
Next i
End Sub

- guardas el libro

Si lo que quieres es proteger las hojas con contrasena en el momento de
abrir el libro (lo cual me parece poco practico), podrias hacerlo por
ejemplo asi (quita lo que sobre):

'Este codigo protege las hojas selectas con una clave unica.
Private Sub Workbook_Open()
ws = Array("Hoja1", "Hoja3")
For i = 0 To UBound(ws)
Worksheets(ws(i)).Protect _
password:="clave", _
DrawingObjects:=True, _
Contents:=True, _
Scenarios:=True, _
userinterfaceonly:=True
Next i
End Sub

o bien

'Este codigo protege las hojas selectas cada una con su clave.
Private Sub Workbook_Open()
ws = Array("Hoja1", "Hoja3")
clave= Array("clave1", "clave2")
For i = 0 To UBound(ws)
Worksheets(ws(i)).Protect _
password:=clave(i), _
DrawingObjects:=True, _
Contents:=True, _
Scenarios:=True, _
userinterfaceonly:=True
Next i
End Sub


Saludos,
KL
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida