Proteger hojas de excel con macros

Mi problema es como puedo desproteger y proteger una hoja de excel automáticamente con una macro cuando esta se ejecute y realice una tarea, ya lo hice de una forma la protege pero no permite asignarle valores a la contraseña, lo que quiero es poner una contraseña alfa-numérica, que al ejecutarse la macro se ejecute la tarea y se vuelva a proteger la hoja, para que los usuarios no puedan modificar los datos de la hoja
Gracias por atender mi cuestión y le agradecería mucho si pudiera mandarme un manual de macro y algo sobre el uso userfrom como menús de tareas.

2 respuestas

Respuesta
1
Para desproteger y luego volver a proteger se hace así:
ActiveSheet. Unprotect "contraseña"
'codigo de la macro aqui
ActiveSheet. Protect "contraseña"
Donde contraseña tendrá el valor que tu quieras, evidentemente.
Una dirección de tutoriales que te puede servir:
http://www.vcd.cl/tombrad/pcasual/cursos.html
Respuesta
1
Los métodos Protect y Unprotect permite el uso de una contraseña en su sintaxis.
Así tu macro debería tener una estructura como la siguiente:
Sheets("Hoja1"). Unprotect "TuClave"
'<coloca aquí los comandos a ejecutar en tal hoja>
Sheets("Hoja1"). Protect "TuClave"
Desde luego, puedes cambiar la palabra TuClave por la contraseña que quieres usar.
Esta puede ser tomada desde un celda en el libro, una variable declarada en el procedimiento o, como ves en el ejemplo, puede estar explícitamente escrita en el código.
Desde luego, el hecho de que la contraseña esté en el código permite al usuario medianamente avanzado ingresar a la macro y leerla, por lo cual te recomiendo también proteger el código colcándole una clave.
Para ello, accede al Editor de Visual Basic, en su Navegador de Proyectos, busca el de tu archivo -cierra todos los elementos que tenga asociado- haz click derecho sobre él. Elige "Propiedades del VBA Project". Selecciona la solapa de Protección, marca la casilla de "Bloquear proyecto para visualización" y también ingresa otra contraseña aquí.
Finalmente, te sugiero que además le agregues una instrucción para que lo que haga en cada hoja, no sea mostrado en pantalla, devolviendo el control luego de haber protegido nuevamente la hoja (usa la propiedad ScreenUpdating). También es útil, evitar que el usuario presione control + pausa, interrumpiendo la macro cuando la hoja está desprotegida (Propiedad EnableCancelKey).
Con estas sugerencias, tu macro quedaría:
Application.ScreenUpdating = False
Application.EnableCancelKey = xlDisabled
Sheets("Hoja1").Unprotect "TuClave"
'<coloca aquí los comandos a ejecutar en tal hoja>
Sheets("Hoja1").Protect "TuClave"
Application.EnableCancelKey = xlInterrupt
Application.ScreenUpdating = True
---
Carezco de un manual de macros. De hecho, mi aprendizaje se basó (y se basa) en el Help de VBA, que -contrariamente a la opinión de muchos- es sumamente útil.
De todos modos, sé que Valedor (de los mejores expertos en este panel) cuenta con uno en su sitio:
http://www.vbalym.netfirms.com/index.html
Además, hay otro experto que se ofrece gentilmente a enviar el suyo. Busca a Rowen.
(En cualquier caso, te sugiero que indiques una dirección de e-mail para que te lo envíes. No mencionaste cómo podría hacerlo).
Creo que con esto resolverás tus requerimientos.
Si así fuera, agradeceré un comentario y que la finalices.
(Recuerda que mantener cierto número de respuestas pendientes impide que otros usuarios puedan consultarme)
Un abrazo!
Fernando
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
A cambio de mi tiempo, sólo te pido dos cosas:
- Finaliza (con puntaje y comentario) esta pregunta
- Ingresa al sitio www.porloschicos.com y, si quieres,
presiona el botón de donación (es gratis).
Confío en que lo harás.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas