Hace unos días, vimos como desproteger una hoja de cálculo, de la cual desconocíamos (o de la que habíamos olvidado) su password o contraseña.
Hoy toca algo muy sencillito. ¿Cómo podemos proteger y desproteger nuestro libro de excel, y nuestras hojas de cálculo, mediante un macro?. Pues de una forma muy sencilla. Nos bastará con colocar unas brevísimas líneas de código.
Si deseamos proteger una hojas de cálculo (una pestaña, para entendernos):
'Protegemos la hoja activa, es decir, 'la hoja donde ejecutamos el código ActiveSheet.Protect "aquí_va_la_contraseña_que_quieres_ponerle_a_la_hoja" |
Si deseamos desproteger una hoja de cálculo (una pestaña, para entendernos):
'Desprotegemos la hoja activa, es decir, 'la hoja donde ejecutamos el código ActiveSheet.Unprotect "aquí_va_la_contraseña_que_tenga_la_hoja" |
Si deseamos proteger un libro de excel:
'Protegemos el libro activo, es decir, 'el libro donde ejecutamos el código ThisWorkbook.Protect "aquí_va_la_contraseña_que_quieres_ponerle_al_libro" |
Si deseamos desproteger un libro de excel:
'Desprotegemos el libro activo, es decir, 'el libro donde ejecutamos el código ThisWorkbook.Unprotect "aquí_va_la_contraseña_que_tenga_el_libro" |
La contraseña de la hoja, y del libro, deben ir entre comillas, tal y como aparece en esas líneas de código anterior. Podéis ponerle la contraseña que queráis, tanto a las hojas, como al libro.
Como veis, es extremadamente sencillo.
46 comentarios:
Muy bueno tu post, espero poder seguir revisando, lo que es a mi, me ayudo un monton para realizar una macro en un libro de excel, y quede como rey.
Gracias por tu blog
Cristian Hernandez G.
Muchas gracias. Me alegro que te haya servido,
Salu2
Hola, nuevamente yo te comento y te externo una duda, existe un codigo, con el cual, despues de que se ejecute una macro X, automaticamente se ejecute esa misma macro, y automanticamente ponga una contraseña?
Se me ocurre algo asi (claro que no se codigos ni nada)
if visualbasic.run then
thisworksheet.active.protection "contraseña"
Por si la macro que ejecutaron fue una para desbloquear tu hoja, automaticamente despues de esa macro se vuelve a bloquear.
Hola C.P.Gerardo.
Para hacer lo que pretendes, primero tienes que incluir como primera línea del macro, algo como esto para desproteger la hoja (tal y como explico en este mismo artículo):
ActiveSheet.Unprotect "tu_contraseña"
Las siguientes líneas serían las de tu macro, que se ejecutaría con la hoja desprotegida, pues eso es lo que hemos hecho poniendo esa primera línea, y al final del macro, tendrías que incluir esta última línea:
ActiveSheet.Protect "tu_contraseña"
Sustituye tu_contraseña por la contraseña que tenga o que quieras ponerle a la hoja (las comillas dobles debes dejarlas como aparecen ahí).
Salu2
Hola:
Creo que esta vez si no me supe explicar bien, lo intentare de nuevo:
Aqui mismo en tu pagina tienes un código con el cual desproteger una hoja de excel, logicamente yo en mi trabajo no voy a incluir esa macro, pero cualquiera podria intentar desproteger mi hoja con ella, ahora bien, ¿algun modo para que si en mi hoja se ejecuta una macro "no deseada" al finalizar la macro no deseada se vuelva a poner mi contraseña u otra contraseña, o tal vez algo mas drastico como borrar todo el contenido de la hoja, dejandola inservible?
Hola C.P. Gerardo.
Si pones una contraseña lo más larga posible, y combinando letras, números y otro tipo de caracteres, entonces va a ser mucho más difícil que alguien de con el password.
Aunque ya sabes que en temas de software, no hay nada inviolable. Es más, existe un programa llamado "Password Recovery" que lo que hace precisamente es recuperar contraseñas "olvidadas" de Office (Excel, Word, etc...), con lo cual, si alguien quiere desproteger una hoja, libro, o incluso módulo VBA, lo podrá hacer con ese software.
Además, ten en cuenta que lo que pretendes hacer es imposible, ya que ¿qué pasaría si fueses tú quien quisieses desproteger la hoja para realizar algún cambio?. ¿Se borraría la hoja?. ¿Se borraría el macro?. ¿Te quedarías sin todo el trabajo realizado?. No se puede hacer eso.
Salu2
Hola:
Mira creo que solucione el problema, solo que mal, por que, tarda en ejecutarse esta macro, tal vez tengas una mejor idea, pero esto funciono
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Range("a1").Value = "a"
ActiveSheet.Protect "pepe"
End Sub
donde a1 es una celda protegida, si la hoja esta protegida, marca error y se debe brincar hasta el final, osea se acaba, y si puede escribir en a1, es que la hoja esta desprotegida, asi que procede a protegerla de nuevo. Como vez, alguna idea para mejorar este intento de macro :p
Prueba esto dentro de un módulo:
Sub ejemplo()
'si hay errores que siga ejecutando el macro
On Error Resume Next
'desprotegemos la hoja
ActiveSheet.Unprotect "pepe"
'escribimos algo en la celda A1
Range("a1").Value = "a"
'protegemos la hoja
ActiveSheet.Protect "pepe"
End Sub
Gracias amigo
tu aporte esta muy bien y me sirvio de mucho
gracias
john yate
Me alegro que te haya servido.
Gracias por tu comentario.
Salu2
Hola Javier,
Se que me ayudaras por eso te escribo... Te explico mi problema, yo tengo una hoja protegida que requiero modificar sin embargo no tengo la clave, pero el usuario que ejecutará la macro si la tiene. Entonces, yo quisiera obtener esa clave para proseguir con la modificación de la hoja (la macro es quien realizara las modificaciones) hice algo asi:
while Not Salir
if (ActiveSheet.Unprotect) = vbCancel then
pregunto si cierro la modificacion
else
salir = true
prosigo
endif
wend
pero no funciona cuando ingresa la clave correcta,. el bucle se hace infinito.
Espero me haya explicado bien y se que me ayudaras.
Gracias.
Jesica
Tienes mucha seguridad en tí misma Jesica (lo digo por la coletilla de que "estás segura que te ayudaré")...
Échale un vistazo a esta entrada donde hablo de como desproteger una hoja de cálculo sin saber la contraseña.
Un saludo.
Muchas gracias JAVIER... tu pagina es mi sitio de consulta indispensable.... como te dije alguna vez no te pido todo resuelto ya que eso es parte de nuestro trabajo pero como experto busco en ti siempre un referente...
GRACIAS... ya revise el link y me ayudo me dio luces de lo que debo hacer...
Jesica
Peru
Gracias Jesica, pero para nada me considero un experto, y ni mucho menos un referente. Soy un usuario llamémosle "despierto", sin más calificativos.
Además, me es imposible recordar el nombre de todos los usuarios que dejan mensajes en los artículos, y tampoco sé si Jesica, la que deja un mensaje hoy, es la misma Jesica que dejó un mensaje hace 4 meses. Ni mi memoria es tan prodigiosa, ni un mensaje firmado como "anónimo", me da tanta información :-)
En cualquier caso, muchas gracias por tus palabras, y espero haberte ayudado.
Un saludo.
buenos muchachos, les tengo una perlita. tengo una macro en visual, es una factura del office 97, resulta que yo le pretendo hacer unas modificaciones;pero cuando ingreso herramientas-macros-editor de visual Basic, me pide contraseña la cual no tengo, me podrian informar como hago para desprotegerla, ojala sea un paso a paso no soy experto. gracias
Me encanta esta página que acabo de descubrir. Tengo una pregunta dando vueltas y es un problema que me surge con frecuencia en mis archivos, ¿puedo aplicar esta macro (aunque haya que modificarla) a un grupo de hojas ?
Si deseas proteger/desproteger hojas, puedes aplicar ese código a tantas hojas como desees. Eso sí, lo que no puedes hacer es seleccionar todo el grupo de hojas a la vez para aplicarles la protección/desprotección de hojas. Deberás hacerlo, hoja a hoja, tanto si todas las hojas tienen el mismo password, como si tienen una contraseña distinta cada una.
No sé si era esa tu consulta...
Realmente lo que buscaba era el modo de seleccionarlas todas y de una sóla vez protegerlas, pero aún así me ha ayudado bastante.....
Gracias
Tienes una opción muy sencilla, que es meter esas líneas de código en un bucle que lo que hace es recorrer todas las hojas. Algo tan sencillo como esto, por ejemplo para proteger todas las hojas:
Sub proteger_todas()
'para todas las hojas del libro...
For i = 1 To Sheets.Count
'protegemos la hoja de que se trate con el password: pepe
Sheets(i).Protect "pepe"
'continuamos con la siguiente hoja
Next
End Sub
Mírate esto otro, que igual te interesa. Es otra forma para proteger un libro de excel.
Hola giuliano. Échale un vistazo a este artículo donde se explica como proteger y desproteger una hoja de excel sin usar macros.
Saludos.
Muy agradecido por compartir sus conocimientos. Una consulta sobre el punto, como puedo usar un control activex, estando la hoja protegida?, por ejemplo el calendario? o el monthview?, porque al intentar desproteger por macro cuando se de un evento click, solo me permite hacer el click en ciertas zonas del objeto y no justamente en las fechas donde necesito.
Wow Javier, excelente página. Quería hacerte una consulta (como todo lector!!!)
Tengo una hoja que protejo cada vez con una clave diferente, en total uso un listado de 12 claves posibles que yo conozco pues la asigno yo misma. Lo que deseo es que en esa misma hoja, cuando corra la macro a crear, se prueben las contraseñas una a una hasta dar con la que en esas 12, es la correcta y al dar con la clave, interrumpa la búsqueda y desproteja de una vez. Supongo que necesito un ciclo que lo controle, pero no se hacer esto. Siempre será una de esas 12 claves pero cada vez que guardo la hoja debo poner la clave de mi lsta y lo que colocar manualmente la que tiene sino que la macro lo haga por mi. ?hay forma? Espero que si y que me puedas ayudar. Desde ya gracias Y FELICITACIONES POR ESTE BLOG QUE ES EXCELENTE!!!
Mira que os gusta complicaros la vida... ¡¡¡12 passwords!!!.
Puedes probar algo como esto... Es un ejemplo con 3 passwords.
No me preguntes como volver a proteger, porque eso te lo dejo para que investigues. Puedes volver a proteger, por ejemplo, metiendo el password en una variable global (googlea, para saber que es eso). Luego ya no necesitarás ejecutar este macro que te pongo, si tienes que volver a proteger/desproteger, pues el password estará almacenado en una variable global.
Para lo que pides, prueba esto:
Sub desproteger()
'Si hay errores, que continúe
On Error Resume Next
'definimos las posibles contraseñas
passwords = "juan, pepe, ana"
'separamos cada password para probarlas
pass = Split(passwords, ",")
'probamos...
For i = 0 To UBound(pass)
'desprotegemos, probando
ActiveSheet.Unprotect pass(i)
Next
End Sub
No quites la 1ª línea del macro (On error resume next), porque si probamos la primera contraseña, y no es esa la elegida, nos dará error, y se detendrá el macro. Con esa línea, contínua haciendo lo que tiene que hacer, incluso con errores.
Un saludo.
Excelente blog, la verdad me ha ayudado de sobremanera la información publicada aquí.
Quisiera que me ayudaran con algo en lo que he estado trabajando y que aún no he podido solucionar.
¿Hay alguna forma de que una macro guarde un archivo asignando un password mediante la opción nativa de excel "contraseña de apertura" que se encuentra en el apartado de "herramientas" cuando se "guarda como..."?
Es decir, que al abrir el archivo que he guardado mediante la macro, éste pida la contraseña de apertura del mismo (opción que obviamente se encuentra disponible en excel).
Yo se que lo más fácil sería hacerlo manualmente, pero he pensado en incluir un botón en l libro que tengo para aquellos usuarios que no dominan este procedimiento.
De antemano muchas gracias por sus respuestas. Exitos!
Enrique Herrera.
En este artículo tienes un ejemplo desarrollado con VBA: Proteger un libro excel.
No obstante, si lo quieres hacer con la solución que implementa el propio Excel, puedes probar con algo como esto:
Sub Guardar_con_password()
ruta = "C:\Mis cosas personales\ejemplo.xls"
pass_apertura = "Enrique"
ActiveWorkbook.SaveAs Filename:=ruta, Password:=pass_apertura
End Sub
Por cierto, hoy he publicado un nuevo artículo con cuestiones relacionadas con la protección de ficheros excel.
Muchas gracias Javier!
Lo que me has propuesto me ha funcionado excelentemente. Muchas gracias por compartir tus conocimientos.
El problema que tenía era simple, yo estaba usando el parámetro:
ActiveWorkbook.SaveCopyAs
que me imagino no admite la opción:
Password:="abc"
porque me devolvía un error. Sin embargo, al utilizar el código que me detallaste me di cuenta que lo correcto era:
ActiveWorkbook.SaveAs
que obviamente si admite la opcion para asignar password.
Yo estaba utilizando "...SaveCopyAs" porque pense que era la sintaxis correcta para guardar una copia del archivo original. Sin embargo ahora me doy cuenta que no es indispensable.
Obviamente tan sencillo error no lo hubiera solucionado sin tu ayuda. Muchas gracias!
Por cierto, disculpa mi tardanza en agradecer.
Att. Enrique Herrera
Hola..soy nueva en el tema..en realidad ando en el Visual Basic de pasadita..x eso estoy con una dificultad he creado una serie de macros que tienen como principal objetivo pedir contraseñas para habilitar ciertas hojas que estan "hidden", la dificultad es que cuando el usuario logra abrir la hoja y cierra el archivo de excel,una vez que se abre el archivo de nuevo estas hojas que no deseo que sean visibles lo están, que puedo hacer para q no se guarde eso?
Mírate este artículo donde explico como ocultar o mostrar hojas, con macros
Re-bueno tu blog y sabes queria hacerte una preguntas... estoy haciendo unas macros y nececito que una vez finalizada la macro el archivo se guarde automaticamente, eso lo hace, pero ademas necesito que se guarde en una direccion que no siempre va a estar disponible, entonces queria saber como puedo saber si la direccion donde guardo la copia esta disponible o no
de entemano
gracias
JAVIER EXCELENTE PAGINA MUCHAS FELICIDADES, TE LLEVASTE UN 110 DE CALIFICACION.
A TODOS LOS QUE NOS HACIA FALTA UNA AYUDADITA DEBEMOS ESTAR AGRADECIDOS CON TIGO.
Y PARA VARIAR YO TAMBIEN TENGO UNA PREGUNTA Y SOLICITO TU AYUDA. ESPERO DARME A ENTENDER.
TENGO UN PROGRAMA QUE REALICE PARA ELABORAR MENUS DE COMIDA Y QUE REALIZA HOJAS DE PRODUCCION Y ORDENES DE COMPRA. NADA MAS HAY QUE INTODUCIR LA RECETA Y PROGRAMAR EL MENU Y VA! TODO EL TRABAJO ESTA LISTO.
ESTE PROGRAMITA ME LO QUIEREN COMPRAR PERO DESEO QUE TENGA UNA CONTRASEÑA DE APERTURA QUE NADA MAS YO LA CONOSCA, Y QUE CON UNA MACRO PROTEGIDA SE PUEDA HABRIR. VAMOS AL ABRIR EL LIBRO ME PIDE EL PASSWORD, Y HAY QUE INGRESARLO, PERO QUIERO INSTALAR UN BOTON EN LA BARRA DE MENU QUE REALICE ESTE PROCESO EN EL ORDENADOR QUE LO DEJE Y QUE CUANDO LO QUIERAN ABRIR EN OTRO NO PUEDAN Y SE PIDA LA CONTRASEÑA.
TE AGRADECERE INFINITAMENTE TU GRAN AYUDA.
L.C.P. JUAN MANUEL LEAL
En este blog, tienes varios artículos relacionados con el tema de la protección de trabajos en Excel. El que más te interesa es el de proteger un libro de excel (puedes incluir las 2 técnicas que se explican allí). También te interesan estos artículos:
Protegiendo nuestros trabajos en excel
Leer el número de serie de los discos
Impedir que se le cambie el nombre al fichero
DISCULPA QUE TE CONTESTE HASTA HOY.
MUCHAS GRACIAS POR TU AYUDA, ME SIRVIO MUCHISIMO.
Y DE NUEVA CUANTA FELICIDADES POR TU WEB.
UN SALUDO A TODOS DESDE ACA GUADALAJARA, JALISCO, MEXICO.
JUAN MANUEL
Javier, tu página está excelente y me ha ayudado mucho.
Estoy creando un control de operaciones que consta de varios módulos y los he protegido contra escritura por medio de macros en la cual incluyo la contraseña, y uno de ellos es una tabla dinámica, y es en este módulo que al protegerlo mediante macros no permite activar el filtro de informe. Para que funcione el filtro de informe estando protegido el módulo tengo que protegerlo manualmente activando la casilla "Usar informes de tabla dinámica". Me puedes decir como resolver el problema mediante la protección con macros?
Agradezco tus atenciones
Saludos, despues de pasar varias horas haciendo el intento de ver una hoja oculta y que además tenia contraseña la hoja y el libro, la instrucción siguiente funciono perfecto:
Sub desproteger()
On Error Resume Next
passwords = "juan, pepe, ana"
pass = Split(passwords, ",")
For i = 0 To UBound(pass)
ActiveSheet.Unprotect pass(i)
Next
End Sub
Primero desprotegi el libro, luego la hoja y finalmente con BVA di la instrucción en la hoja correspondiente, por ultimo cambie el valor de Visible que estaba Hidde a -1-xlsheetvisible.
Muchas gracias
Daltonbuc66
Es interesante todo lo que hay en este Blog; no soy programadora y con toda la informacion que colocas, los detalles, las explicaciones y los ejemplos he logrado hacer mi primer macro en execel!! Me agrda trabajar con excel y tu página es lo mejor que he encontrado para darle mejor utilidad a mis hojas de cálculo.
Felicidades por tu Blog, y muchas gracias por compartir todos tus conocimientos sin mezquindades.
hola, me gustaria saber como hago para desproteger la contraseña de un archivo de excel que lo tenia hace años, cuando abro el archivo de excel, de entrada me pide una contraseña y no me la se, me gustaria mucho que me ayudaran, he aprendido mucho de este blog, gracias por la ayuda
Échale un vistazo a este artículo: Desproteger una hoja de cálculo.
Saludos.
Hola necesito ayuda..........
No puedo ver el codigo de una macro de esxcel pq tiene contraseña
Lo intente con el codigo q adjunto pero no se puede pq; puedo crear el nobre de la macro, pero para copiar el codigo ya no abre la nueva ventana, sino q abre una para solicitar contraseña.
Por favor ayudenme es urgente y sumamente importante.
Gracias.
1.Sub breakit()
2.
3. Dim i As Integer, j As Integer, k As Integer
4. Dim l As Integer, m As Integer, n As Integer
5.
6. On Error Resume Next
7. For i = 65 To 66
8. For j = 65 To 66
9. For k = 65 To 66
10. For l = 65 To 66
11. For m = 65 To 66
12. For i1 = 65 To 66
13. For i2 = 65 To 66
14. For i3 = 65 To 66
15. For i4 = 65 To 66
16. For i5 = 65 To 66
17. For i6 = 65 To 66
18. For n = 32 To 126
19.
20. ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & _
21. Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _
22. Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
23.
24. If ActiveSheet.ProtectContents = False Then
25. MsgBox "Un password valido es " & Chr(i) & Chr(j) & _
26. Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) _
27. & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
28. Exit Sub
29. End If
30. Next
31. Next
32. Next
33. Next
34. Next
35. Next
36. Next
37. Next
38. Next
39. Next
40. Next
41. Next
42.
43.End Sub
Mírate este artículo: desproteger una hoja de cálculo.
Saludos
muy interesante tu blog, tengo un caso, manejo una base de datos en la que tengo que ingresar fechas y que se colorean automaticamente en un rango de fecha de un color y de otro en otro rango de fecha.
Lo que mas me interesa es que al ingresar una fecha a la celda esta se bloquee automaticamente, y no deje modificar la celda que se ingreso el dato.
Es posible hacer eso?
por favor escribeme a mi correro yvanteran@hotmail.com
Gracias.
Gracias por compartir tus conocimientos! Me ayudó para proteger y desproteger una hoja al activarla. ¡Que sencillo!
Gracias y felicitaciones!
Luis Fuentes
Venezuela
hola, ante todo muchas gracias por estas macros, que sirven de mucho en mi trabajo. bueno mi problema es el sigueinte, quiero desporteger varias hojas de excel, que tienen la misma clave, y tengo como 300 arhivos de excel, con el mismo problema, quiero saber si hay uma macro que se ejecute y desprotega todos los libros de cada uno de los 300 archivos de exceles que hay, alguien me puede ayudar.. leonardo castilla, bogota colombia
Hola. Necesito ayuda por favooooorrrrr....cómo hacer para que luego unos segundos de ingresado un dato en una celda de excel, este no se pueda modificar.....Gracias. Si me pueden responder a glopez4@gmail.com ó a calidad@lamaria.com.co
Saludos,
Gloria L.
Buenas Javier Marco la macro para proteger el libro esta buena, pero sucede que cuando la ejecuto al habrir el libro automaticamente me cancela todas las macros y no me permite activarlas, habrá algún modo para evitar esto? y la otra pregunta es hay alguna macro para evitar que se creen mas hojas de calculo en un libro. y por ultimo mire la macro para crear hojas en solo clip y es buena pero deseo saber si una vez que se crea la hoja que se evite en volver a crear la misma hoja?
HOLA!!!
EL TEMA ES QUE EN MI HOJA DE EXCEL TENGO TEXTO NUMEROS Y CONTROLES ACTIVEX, ENTONCES PROTEGO MI HOJA CON LA OPCION DE MODIFICAR EXCENARIOS Y OBJETOS, MI DILEMA RADICA CUANDO QUIERO CAMBIAR LOS ESCENARIOS DE MIS CONTROLES ACTIVEX EXCEL ME MANDA EL MENSAJE ""LA CELDA O EL GRAFICO QUE INTENTA MODIFICAR ESTAN PROTEGIDOS POR TANTO SON SOLO DE LECTURA"" SABEN COMO TENGO QUE HACER PARA QUE NO APAREZCA, YA DECLARE LOS RANGOS QUE QUIERO MODIFICAR, ASI COMO ESCENARIOS PERO NO PUEDO. URGENTE POR FAVOR....
POR FAVOR AYUDA DESEO DESHABILITAR EL BLOQUEO SE LA CONTRASEÑA LO PUEDO ABRIR Y TODO PERO ESA INFORMACION LA DEBO PASAR POR CORREO TODOS LOS DIAS Y MIS JEFES NO LA PUEDEN ABRIR NI SIQUIERA CON LA CONTRASEÑA NECESITO DESHABILITAR LA CONTRASEÑA POOOOR FFAAAAA
Publicar un comentario