Principales respuestas
Deshabilitar boton de Proteger/Desproteger hoja.

Pregunta
-
Saludos, es mi primera pregunta, sin embargo muchas veces me he beneficiado de sus aportes.
Y en esta ocasión necesito saber, si hay posibilidad de hacer que un archivo que esta protegido por una contraseña pero que hace modificaciones por medio de botones asignados a macros y esos macros contienen la contraseña para deshabilitar la opción de protección, a pesar de estar protegido por contraseña el código del macros, si el usuario hace clic en desproteger no le pregunta la contraseña.
Lo que quiero es deshabilitar la pestaña y que solo se pueda acceder con un botón que pregunte una clave o algún mecanismo alterno para evitar que desbloqueen la hoja.
No se que se les puede ocurrir...? De antemano, gracias.
Respuestas
-
Editado:
Creo que acabo de pillar tu problema, ahora, después de haber escrito la Biblia en verso, jaja. Tú dices de un botón que desbloquee la hoja, el usuario ingresa el registro y automáticamente luego se bloquee? Si es así, tu solución es utilizar formularios (los puedes crear desde el mismo editor de VBA y es muy fácil). Si no, entonces mira si lo que he escrito más adelante te sirve. Un saludo.
Como hago para que solo los que se dedican a cargar registros no puedan de ninguna manera desbloquear el archivo? Sino que sea solo mediante en los segundos que el macro se ejecuta para permitir el registro y luego se bloquee.
Es que lo que no entiendo es lo que comentas. Para hacer lo pides basta con en la macro desbloquear y bloquear la hoja al principio y al final respectivamente. Con ello tendrías que tener solucionado tu problema.
Sería del tipo:
Sub Ingresar_Reg()
On Error Goto Bloquear
Dim Ws As Worksheet
Application.EnableCancelKey = xlDisabled
For Each Ws In ThisWorkbook.Worksheets Ws.Unprotect "TuContraseña" Next Ws ' ... ' Tu código para ingresar los registros AQUí. ' ...
Bloquear: For Each Ws In ThisWorkbook.Worksheets Ws.Protect "TuContraseña" Next Ws
Application.EnableCancelKey = xlInterrupt
End Sub
De este modo estará habilitado el Desproteger... de la pestaña de la hoja, pero le pedirá una contraseña que no conoce (debes proteger el código VBA para que no sea visible la contraseña, claro).
Y si aún así, si la macro es parada porque ha habido un error, la macro irá hasta la etiqueta Bloquear y bloqueará todas las hojas antes de detenerse.
Y si además, con la instrucción Application.EnableCancelKey = xlDisabled deshabilitas la capacidad de interrumpir la macro con ESC (luego, una vez protegidas todas las hojas, lo vuelves a habilitar).
Yo tendría el botón para los que solo deben ingresar registros con este último código. Los otros usuarios, que pueden desbloquear las hojas, les haría un botón con el siguiente código:
Sub Desproteger_Hoja() PWD = InputBox("Indique la contraseña para ejecutar la macro.") On Error GoTo PWDincorrect
Dim Ws As Worksheet
For Each Ws In ThisWorkbook.Worksheets Ws.Unprotect PWD Next Ws Exit Sub PWDincorrect: MsgBox "La contraseña indicada es incorrecta. No se desbloquearán las hojas." End Sub
Finalmente, para asegurarme de que el archivo siempre queda bloqueado cuando lo cierro, añadiría el siguiente código en el objeto ThisWorkbook:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim Ws As Worksheet For Each Ws In ThisWorkbook.Worksheets Ws.Protect "TuContraseña" Next Ws End Sub
Proteges todas las hojas antes de guardar el archivo sí o sí.
Creo que con todo esto no dejas ningún flanco abierto. ya me dirás que tal te ha ido. Y encantado de poder echar una mano, hombre ;)
Working Into Binary (WIB) - http://workingintobinary.blogspot.com.es/
- Editado Albert Álvarez sábado, 22 de septiembre de 2012 12:23
- Marcado como respuesta Jose Labrador domingo, 23 de septiembre de 2012 2:31
Todas las respuestas
-
Con que instrucción proteges la hoja? Le asignas una contraseña a "esa" protección? Si proteges sin utilizar una contraseña, al desprotegerla desde la pestaña de la hoja no te la pide y puedes desprotegerla sin problemas.
Prueba con la instrucción:
Worksheets("NombreHoja").Protect "TuContraseña"
Working Into Binary (WIB) - http://workingintobinary.blogspot.com.es/
-
Saludos, gracias por tu respuesta, pero creo no me fue captada la idea, actualmente así como tu me indicas esta bloqueando y desbloqueando la hoja a traves de los macros.
Pero si tu ejecutas el macro, bloquea y desbloquea en todo momento, la cosa es que si el usuario es habil y presiona el botón desproteger, excel lo hara sin preguntarle la clave, y eso es lo que no quiero, que el usuario pueda desproteger la hoja.
-
Si quieres que la macro pida contraseña puedes hacerlo de la siguiente manera:
Sub Tu_Macro() PWD = InputBox("Indique la contraseña para ejecutar la macro.") ActiveSheet.Unprotect PWD '... 'Tu código aquí. '... ActiveSheet.Protect PWD End Sub
No se si es esto lo que pides. De esta manera no se desbloquea la hoja si no conoces la contraseña.Working Into Binary (WIB) - http://workingintobinary.blogspot.com.es/
-
Quizás eso me pueda servir, pero no del todo, te explico, tengo dos tipos de usuarios que usan el archivo, unos que solo se dedican a cargar registros y otros que pueden cargar registro y pueden desbloquear la hoja conociendo la contraseña.
Como hago para que solo los que se dedican a cargar registros no puedan de ninguna manera desbloquear el archivo? Sino que sea solo mediante en los segundos que el macro se ejecuta para permitir el registro y luego se bloquee.
En conclusión, lo que necesito es que puedan usar el archivo, mas no que puedan desbloquearlo.
Agradecido por tu apoyo.
-
Editado:
Creo que acabo de pillar tu problema, ahora, después de haber escrito la Biblia en verso, jaja. Tú dices de un botón que desbloquee la hoja, el usuario ingresa el registro y automáticamente luego se bloquee? Si es así, tu solución es utilizar formularios (los puedes crear desde el mismo editor de VBA y es muy fácil). Si no, entonces mira si lo que he escrito más adelante te sirve. Un saludo.
Como hago para que solo los que se dedican a cargar registros no puedan de ninguna manera desbloquear el archivo? Sino que sea solo mediante en los segundos que el macro se ejecuta para permitir el registro y luego se bloquee.
Es que lo que no entiendo es lo que comentas. Para hacer lo pides basta con en la macro desbloquear y bloquear la hoja al principio y al final respectivamente. Con ello tendrías que tener solucionado tu problema.
Sería del tipo:
Sub Ingresar_Reg()
On Error Goto Bloquear
Dim Ws As Worksheet
Application.EnableCancelKey = xlDisabled
For Each Ws In ThisWorkbook.Worksheets Ws.Unprotect "TuContraseña" Next Ws ' ... ' Tu código para ingresar los registros AQUí. ' ...
Bloquear: For Each Ws In ThisWorkbook.Worksheets Ws.Protect "TuContraseña" Next Ws
Application.EnableCancelKey = xlInterrupt
End Sub
De este modo estará habilitado el Desproteger... de la pestaña de la hoja, pero le pedirá una contraseña que no conoce (debes proteger el código VBA para que no sea visible la contraseña, claro).
Y si aún así, si la macro es parada porque ha habido un error, la macro irá hasta la etiqueta Bloquear y bloqueará todas las hojas antes de detenerse.
Y si además, con la instrucción Application.EnableCancelKey = xlDisabled deshabilitas la capacidad de interrumpir la macro con ESC (luego, una vez protegidas todas las hojas, lo vuelves a habilitar).
Yo tendría el botón para los que solo deben ingresar registros con este último código. Los otros usuarios, que pueden desbloquear las hojas, les haría un botón con el siguiente código:
Sub Desproteger_Hoja() PWD = InputBox("Indique la contraseña para ejecutar la macro.") On Error GoTo PWDincorrect
Dim Ws As Worksheet
For Each Ws In ThisWorkbook.Worksheets Ws.Unprotect PWD Next Ws Exit Sub PWDincorrect: MsgBox "La contraseña indicada es incorrecta. No se desbloquearán las hojas." End Sub
Finalmente, para asegurarme de que el archivo siempre queda bloqueado cuando lo cierro, añadiría el siguiente código en el objeto ThisWorkbook:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim Ws As Worksheet For Each Ws In ThisWorkbook.Worksheets Ws.Protect "TuContraseña" Next Ws End Sub
Proteges todas las hojas antes de guardar el archivo sí o sí.
Creo que con todo esto no dejas ningún flanco abierto. ya me dirás que tal te ha ido. Y encantado de poder echar una mano, hombre ;)
Working Into Binary (WIB) - http://workingintobinary.blogspot.com.es/
- Editado Albert Álvarez sábado, 22 de septiembre de 2012 12:23
- Marcado como respuesta Jose Labrador domingo, 23 de septiembre de 2012 2:31
-