Hojas de cálculo en Excel - página principal

Proteger un libro de excel

Hay varias formas de proteger un libro de excel, pero hoy os presento, una realmente interesante. Se trata de presentarle al usuario un inputbox en el momento de abrir el fichero, y preguntarle por un password (contraseña), para poder ver el contenido del libro. Podemos utilizar un userform, que es mucho más elegante que el inputbox, pero con este ejemplo, lo que pretendo es enseñaros la técnica de preguntar, y validar la respuesta.

Le daremos al usuario 3 oportunidades para que introduzca la contraseña, Si no la pone correctamente, cerraremos el libro. Para ello, deberemos colocar este código en un módulo de VBA (no debéis cambiar el nombre del macro, ...aquí tenéis más información sobre el funcionamiento de los macros que se ejecutan al abrir o cerrar un libro):


Sub auto_open()
'Le daremos al usuario 3 intentos
'para poner la contraseña correctamente

intentos_totales = 3
'el password que usaremos será excelente,
'así que si queréis otro password, solo tenéis
'que cambiar esa palabra (manteniendo las comillas)

contrasenia = "excelente"
'ponemos el contador a 1, porque
'este será el primer intento

intento = 1
Do While clave <> contrasenia
'presentamos el inputbox
clave = InputBox("Introduce la contraseña." & Chr(10) & Chr(10) & _
"Tienes " & intentos_totales & " intento(s). " & _
"Intento " & intento & " de " & intentos_totales & ".")
'Sumamos un intento
intento = intento + 1
'Si el usuario llega al nº total
'de intentos, y pone el password
'incorrectamente, cerramos el libro

If intento > intentos_totales And clave <> contrasenia Then ThisWorkbook.Close
Loop
End Sub


Este sistema es muy similar al que utiliza el propio Excel, de forma nativa, pues podemos solicitar una contraseña al usuario cada vez que abrimos el fichero, sin necesidad de programar nada. Nos bastará con seleccionar en el menú Archivo, la opción Guardar como…, y justo debajo del nombre de la ventana donde nos aparece el "Guardar como", a la derecha del todo, seleccionaremos el desplegable Herramientas, y a continuación Opciones generales…. Desde ese sitio, podremos asignar una contraseña para la apertura del fichero, y otra para la escritura, si es que así lo queremos.



32 comentarios:

Noé dijo...

Hola:
Funciona perfectamente pero si se pone el nivel de seguridad de macros "muy Alto" las macros no se ejecutan y el libro quedaría desprotegido ¿hay alguna manera de evitarlo?
Saludos.

Javier Marco dijo...

Ya lo he comentado alguna vez...

Si distribuyes un libro protegido, y el usuario le asigna un nivel de seguridad muy alto, de poco le va a servir ese fichero, porque seguramente eso que distribuyes, incluye cierta programación, con unos cuantos macros, y si los desactiva, no le va a ser útil el fichero.

No se puede hacer nada contra la voluntado del usuario. Si establece un nivel de seguridad alto, no se ejecutará ningún macro.

Karla dijo...

Me han sido de utilidad este artículo y otro con macros que esconden las hojas.
Gracias,

Javier Marco dijo...

Muchas gracias por tu comentario, Karla.

Anónimo dijo...

Javier: Me gustaría saber, en el caso de que sean 3 usuarios con Password diferentes... Con las mismas atribuciones, pero para que cada uno recuerde una clave que le sea sencilla...
Gracias

Gabriela dijo...

Hola Javier... Que tal estas´..? En una semana he aprendido muchisimo contigo... Dios te bendiga por compartir tu sabiduria...!!!
Ahora bien... quisiera saber como hago para que cuando abran el archivo, no vean las letras/numeros de filas/columnas... osea, las barras A B C D F G.... 1 2 3 4 5 6 7 8... Esas barras grises que trae excel para trabajar... como las oculto..?? pues estoy preparando una "plantilla" por decir asi... bloqueada, protegida, etc... y quisiera ocultar eso en ese archivo... como hago?? jejeje Gracias Mil...

Javier Marco dijo...

En el macro Auto_open(), o bien creando un macro llamado Workbook_Open() dentro de ThisWorkbook, añade esta línea:

ActiveWindow.DisplayHeadings = False

Gabriela dijo...

Gracias Javier.... Tu blog ha sido el mejor tutorial que he conseguido en todo internet... he aprendido muxoo... :) Graciass...

Javier Marco dijo...

Gracias por tu comentario :-)

Anónimo dijo...

hola javier como estas mira necesito tu ayuda quisiera saber como dos o mas usuarios pueden proteger y desproteger un libro de excel

Anónimo dijo...

Javier muchas felicitaciones, tienes un excelente Blog, muy util para quienes nos estamos iniciando, desde hoy considerame un FAN.

Tengo una pregunta para tí, es posible que en una hoja tenga la pantalla de ingresos de datos, pero que el background tenga un fondo protegido y que solamente se vea el formulario y en otra hoja, digamos una base de datos, se ingresen los registros.

Un gran abrazo y gracias por tus aportes, me han sido utilies.

Javier Marco dijo...

Pásate por este artículo: introducir datos utilizando un formulario y por este otro: proteger y desproteger con macros.

Como verás, solo tienes que desproteger la hoja, insertar los datos mediante el formulario, y volver a protegerla hoja, una vez pulsado el botón de envío, o de aceptar.

Saludos, y gracias por tu comentario.

Daniel Mark dijo...

Hola Javier, ante todo quisiera agradecerte por todo el aporte, me estás salvando la vida.

Quería preguntarte cómo puedo hacer que un documento en Excel sólo se pueda abrir al encontrar un archivo determinado (puede ser otro documento en excel u otros).

En su defecto, cómo puedo hacer que un archivo Excel sólo pueda ser abierto con un CD. Sería fantástico saber ello.

Muchas gracias por todo, que Dios te bendiga y te traiga muchos éxitos!.

Javier Marco dijo...

¿Abierto con un CD?. Si así fuera, el usuario no podría grabar los cambios que hiciese en el fichero, ¿no?. Y en ese caso, sería por tanto un fichero de solo lectura.

Respecto a lo de abrir un fichero Excel, si se encuentra otro fichero, mírate este macro:

Listar los archivos de un directorio. Tendrías que adaptarlo para "leer" si el fichero se encuentra en la ruta especificada. Eso se haría al abrir el fichero excel, para lo cual, debería ejecutarse en el Auto_open()

Si el fichero no estuviera, se cierra el fichero de excel, y sino, se deja abierto.

Saludos.

Daniel Mark dijo...

Muchas gracias, voy a intentarlo. Éxitos!

Anónimo dijo...

hola, me gustaria que me indiques como hacer para que al ingresar la contraseña no se muestre lo que se ingresa sino * o x, muchas gracias. me han servido muchas de las coses que tienes en eslte blog.

Javier Marco dijo...

Pues es muy sencillo. Imagina que tienes un userform, y dentro del mismo, un textbox.

Desde el modo VBA, cliquea encima del textbox, y a la izquierda, donde te aparecen las propiedades del mismo, verás una llamada PasswordChar. Escribe a la derecha de ese texto (de PasswordChar), un asterisco, un 5, una J, o el carácter que quieras que se presente, cada vez que solicitamos un password.

Saludos.

Anónimo dijo...

Disculpas Javies Marco, pero no se mucho de programación igual mente gracias por tu preocupación en explicarme, pero seria mucha molestia pedirte que me pases el código completo, con la característica de que en lugar de que ponga la contraseña explísita coloque otro caracter, mil gracias.

Raúl dijo...

Hola Javier, te saluda Raúl.de Nic.
Excelente ayuda, mi respeto y gran admiración por tu enorme y muy gentil ayuda. Gracias por por el Imputbox que solicita la contraseña, sin embargo antes de presentar el código, mencionas que es posible hacerlo a través de una Userform, y me encantaría si me muestras como sería, lo intente pero no se como escribir la orden o acomadarla para que se ejecute correctamente.
Mil gracias de antemano.

Javier Marco dijo...

Hola Raúl.

Prueba a ver si con la opción predeterminada de Excel, te es suficiente. Cuando guardes el fichero: Archivo --> Guardar, verás que en el cuadro de diálogo que se te desplega, aparece un desplegable donde aparece "Herramientas". Cliquea allí, y selecciona "Opciones generales".

Allí puedes poner un password para la apertura del fichero, y otro para escritura. Prueba con un ejemplo, y luego abres el fichero.

Creo que esa opción es mejor que la personalizada vía userform (que también se puede hacer, claro está). La opción por defecto de Excel, solo te permite introducir el password una vez, y si lo introduces incorrectamente, no te lo vuelve a pedir, pues simplemente no abre el fichero.

Un saludo.

Anónimo dijo...

Javier,

me encuentro trabajando en mi memoria de titulo y tu blog ha sido de gran utilidad.

muchas gracias.

Javier Marco dijo...

Gracias por tu comentario. Me alegro que esto que publico, os sirva :-)

Julio Aguilar dijo...

Hola Javier, Mi nombre es Julio Aguilar, y he estado buscando ayuda con excel 2007 y te felicito por tus aportes me han hecho de mucha utilidad y día a día estaré aprendiendo de tus conocimientos, la pregunta es la siguiente, como hago que el clave que escribo no aparezcan los caracteres como letras sino que como asteriscos para que nadie sepa cual es la clave y solo lo sepa el usuario, gracias y mi correo es juceas_19@yahoo.com, de antemano te agradezco tu ayuda

julio aguilar dijo...

hola sabes he buscado una forma para evitar que se eliminen hojas de un libro sin previa autorización y no he podido obtener resultados sera que me podrás ayudar con una macro,,,, de antemano te lo agradezco

JoaoM dijo...

la macro está fenomenal pero, introduzco el 1º passw malo, la 2ª malo y la 3ª bien, ME CIERRA EL LIBRO, es decir, no me dá la 3ª opcion aun introducido bien el passw a la 3ª

Javier Marco dijo...

Tienes razón JoaoM. Había un error en la tercera validación, pues al alcanzar el 3er intento, el libro se cerraba tanto si el password era correcto como si no lo era.

Acabo de modificar el código y he añadido esta condición adicional, antes de cerrar el libro: And clave <> contrasenia

Gracias por el aviso.

Saludos.

JoaoM dijo...

OK, muy bien.
Solo me sucede una cosilla;
Al introducir el pass malo, el Imputbox no permanece visible, tengo que buscarlo en la barra de herramientas, sucede hasta cerrarse si sigo introduciendo mal.
Despues de buscarlo para el 3ª intento, le introdusco mal se cerra, Perfecto, si introdusco bien se visualisa el libro.
eso de tener que buscar el imputbox en la barra de herrasmientas es `propio? o casual? Alguna rutina que no está bien? PREGUNTO.

Gracias por la enmienda en la linea y ¿se podrá corrigir el punto mencionado?

Javier Marco dijo...

La verdad es que desconozco por qué te ocurre eso, pues no debería ocultarse el inputbox.

Debería funcionar de la misma forma con los 3 intentos de introducción del password.

nelson dijo...

Hola javier un saludo cordial ... Tengo un archivo en excel, todas las hojas estan protegidas el acceso a visual basic tambien esta bloqueada , como puedo hacer para impedir que se puedan realizar copias de una hoja de mi archivo en otro libro ya que al realizar esta operacion tranquilamente se puede desbloquear la hoja protegida mediante un macro.... y lo que quiero es proteger mi trabajo
talves otra forma de bloquear para que se impida la visibilidad de las hojas ,claro seria bloquear el axceso a opciones de excel

Anónimo dijo...

hola quisiera sabe si es posible proteger la hoja pero que el grafico que tengo en ella se este actualizando..cada vez que aplique un filtro

Esther dijo...

Acabo de descubrir este sitio y creo que lo voy a visitar asiudamente, me está siendo muy útil.
Muchísimas gracias por la información.

Ricardo César Alvarado dijo...

Hola, hay alguna forma de que ciertas celdas (donde pongo información útil para que el Excel funcioné, por las fórmulas) sólo funcionen sí los macros están habilitados. De modo que sea obligatorio activarlo, y así poder utilizar la protección de libros de Excel que muestra esta página. Muchas gracias