jueves, 26 de julio de 2012

Ocultar una hoja e impedir que se puedan añadir nuevas hojas

Siguiendo con el ejercicio de la última entrada, vamos a usar el libro SE218-IMC.xlsx para ocultar la "Hoja2" y que nadie la pueda mostrar. También impediremos que se puedan añadir nuevas hojas al libro y algunas cosas más.

Hacemos clic en la pestaña de la "Hoja2" con el botón derecho y, en el menú emergente, elegimos Ocultar. La hoja ha desaparecido. Si quisiéramos mostrarla haríamos clic con el botón derecho en la pestaña de cualquier hoja visible y elegiríamos Mostrar, pero no vamos a hacerlo.

Accedemos a Revisar + Proteger libro para mostrar el cuadro de diálogo Proteger estructura y ventanas.

Si marcamos Estructura, Excel impedirá que los usuarios:
  • Vean las hojas ocultas.
  • Muevan, eliminen, oculten o cambien el nombre de las hojas visibles.
  • Inserten nuevas hojas.
  • Copien las hojas en otro libro.
Si marcamos Ventanas, Excel impedirá que los usuarios:
  • Cambien el tamaño y la posición de las ventanas cuando se abra el libro.
  • Muevan, cambien de tamaño o cierren las ventanas.
Marcamos las dos opciones, ponemos una contraseña y pulsamos Aceptar. Excel pide confirmación.

La protección está activada. Veamos si hemos conseguido nuestro propósito.

Para mostrar las hojas ocultas hacemos clic con el botón derecho en la pestaña de la "Hoja1" y elegimos Mostrar..., pero es imposible. La opción está desactivada.

No podemos cambiar el nombre "Hoja1" por otro más adecuado; esta opción tampoco está disponible. En realidad, sólo podemos acceder al editor VBA, desproteger la hoja si conocemos la contraseña o seleccionar todas las hojas (si hay más de una visible). El resto de las opciones, como insertar una nueva hoja, eliminarla, moverla a otra posición o a otro libro, cambiar el color de la etiqueta u ocultarla, están desactivadas. Tampoco se puede minimizar, maximizar o cerrar la ventana.

Como en otras ocasiones que hemos puesto una contraseña de protección, nos preguntamos si podemos desactivarla. Y, también como en los otros casos, la respuesta es afirmativa.

Si conocemos la contraseña iremos a Revisar + Proteger libro. Excel nos pedirá la contraseña, la escribimos y aceptamos.

Si no conocemos la contraseña tendremos que recurrir a una macro parecida a la usada para desproteger hojas. Es la siguiente:

Para insertarla, primero, la descargamos desde aquí, luego, entramos en VBA pulsando Alt + F11, accedemos a Archivo + Importar archivo y buscamos el fichero ContraseñaLibro.bas que acabamos de descargar y descomprimir. Finalmente, salimos del editor de VBA pulsando Alt + Q.

Lanzamos la macro con Alt + F8 (Programador + Macros o Vista + Macros + Ver macros). Elegimos BuscarContraseñaLibro y pulsamos Ejecutar. Excel ejecutará la macro y mostrará el mensaje siguiente:

El libro ha quedado desprotegido. Si hacemos clic con el botón derecho en la pestaña de la "Hoja1" obtendremos la siguiente imagen:

Todas las opciones están disponibles. Podemos mostrar la "Hoja2", maximizar, minimizar o cerrar la ventana, cambiar el nombre de cualquier hoja, poner color a la etiqueta...

Como ya no necesitamos la macro, la eliminaremos entrando de nuevo en VBA (Alt + F11), haciendo clic con el botón derecho en Módulo1, seleccionando Quitar Módulo1 y pulsando el botón No cuando nos pregunte si lo deseamos exportar. Terminaremos con Alt + F8 para salir de VBA.

Cambiando la extensión del fichero por .ZIP también se puede desproteger el libro pero, en este caso, actuando de un modo ligeramente diferente con respecto al método descrito en el artículo Otra forma de desproteger una hoja.
  • Sustituimos la extensión del fichero SE218-IMC.xlsx por SE218-IMC.ZIP
  • Descomprimimos SE218-IMC.ZIP con WinZip.
  • Entramos en la carpeta "xl" y abrimos con el Bloc de notas el fichero workbook.xml.
  • Buscamos la primera aparición de la palabra password, seleccionamos y borramos el bloque siguiente: <workbookProtection workbookPassword="DBC9" lockStructure="1" lockWindows="1"/>
  • Guardamos el fichero con Archivo + Guardar y cerramos el Bloc de notas.
  • Volvemos a comprimir todos los ficheros obteniendo una nueva versión de SE218-IMC.ZIP
  • Sustituimos la extensión del fichero SE218-IMC.ZIP por SE218-IMC.xlsx.
  • Abrimos el libro y vamos a Revisar + Proteger libro. De este modo, el libro queda totalmente desprotegido.

¿Existe alguna forma de ocultar una hoja y que nadie pueda volver a mostrarla? Probemos este método (vamos a ocultar la "Hoja2" que previamente habremos mostrado).
  • Con el libro desprotegido accedemos a VBA pulsando Alt + F11.
  • Insertamos una macro sin contenido eligiendo Insertar + Módulo. La macro puede ser la siguiente (este paso no hay que darlo en Excel 2003):
          Private Sub nada()
          End Sub
  • En el Explorador de proyectos hacemos clic en Hoja2 (Hoja2).
  • En la Ventana de Propiedades elegimos 2 - xlSheetVeryHidden en la propiedad Visible.
  • Accedemos a Herramientas + Propiedades de VBAProject y, en la pestaña Protección, marcamos Bloquear proyecto para visualización, ponemos una contraseña, la repetimos en la fila siguiente y pulsamos Aceptar.
  • Salimos de VBA pulsando Alt + Q. La "Hoja2" habrá desaparecido.
  • Si estamos en Excel 2007 o 2010, guardamos el libro con el nombre SE218-IMC.xlsm (¡ojo! hay que cambiar la extensión). En Excel 2003 se guarda con el nombre original.
  • Cerramos Excel y volvemos a abrir el libro para comprobar que no se puede acceder a la "Hoja2".



—¿La protección es realmente segura?
—No, también en este caso la protección es fácil de eliminar. Se hace así:
  • Sustituimos la extensión del fichero SE218-IMC.xlsm por SE218-IMC.ZIP
  • Descomprimimos SE218-IMC.ZIP con WinZip.
  • Entramos en la carpeta "xl" y abrimos con el Bloc de notas el fichero workbook.xml.
  • Buscamos el bloque <sheet name="Hoja2" sheetId="2" state="veryHidden" r:id="rId2"/>, eliminamos state="veryHidden" y lo dejamos así: <sheet name="Hoja2" sheetId="2" r:id="rId2"/>
  • Guardamos el fichero con Archivo + Guardar y cerramos el Bloc de notas.
  • Volvemos a comprimir todos los ficheros obteniendo una nueva versión de SE218-IMC.ZIP
  • Sustituimos la extensión del fichero SE218-IMC.ZIP por SE218-IMC.xlsm.
  • Abrimos el libro y comprobamos que la "Hoja2" ha aparecido de nuevo.


12 comentarios:

  1. Buena tarde quisiera que me ayudaras a obtener la jerarquia por merito de 10 alumnos. el primer criterio sería el promedio de las calificaciones en caso de empate la de español desempataria, si continua la de matemáticas asi sucesivamente son seis calificaciones.
    Alumnos ESPAÑOL MATEMA C. NAT GEOGRA HISTOR FCYE P/R
    1 David 9 8 7 8 7 9 8.0
    2 Pedro 10 8 7 7 8 8 8.0
    3 Carlos 8 7 9 8 5 7 7.3
    4 Julio  9 7 7 9 7 8 7.8
    5 Ricardo  8 9 9 8 7 8
    6 Cesar  9 6 6 6 9 9 7.5
    7 Diego  6 7 7 7 10 7 7.3
    8 Patrick 7 9 8 8 9 6 7.8
    9 Brayan 8 6 9 9 7 7 7.7
    10 Lucia 9 8 6 7 9 8 7.8

    ResponderEliminar
  2. muy bien!!

    pe parece excelente tu aporte y me ha funcionado de maravilla!

    gracias!

    ResponderEliminar
  3. Hola,

    ¿Podrías cambiar el fondo o el color de la letra? porque en los diferentes tonos similares se pierde y no se alzanza a distinguir.

    saludos!

    ResponderEliminar
  4. Hola gran aporte!
    Quisiera saber también como ocultar las cintas de opciones, así como muestran tus imágenes.

    ResponderEliminar
  5. Muchas gracias por este aporte. Sencillo, puntual y contundente. Un maestro.

    ResponderEliminar
  6. Excelente tu publicación Javier, profesional y que facilidad para ayudar a conseguir el objetivo, espero continues trabajando en trucos como estos.

    Saludos

    Edgar

    ResponderEliminar
  7. ¿Existe alguna forma de protección que no se pueda eliminar?

    ResponderEliminar
  8. saludo, he creado un par de archivos utiles, quisiera compartirlo en la rred, como no se como hacerlo, explicame algun medio para ello

    ResponderEliminar
  9. Excelentes consejos que me apunto porque hay que intentar abordar un poco este tema para así conseguir buenos resultados en nuestra web y por extensión nuestro negocio

    ResponderEliminar
  10. Tremendo Javier. Me ha servido en 2017.
    Gracias!!

    ResponderEliminar