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.htmlAdemá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.