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

Buscar hojas ocultas

Hoy os presento una sencilla utilidad que nos servirá para determinar las hojas ocultas que hay en un libro de excel. El libro puede ser nuestro, puede ser un libro de excel que nos haya pasado un amigo, o puede ser uno que hayamos descargado de internet. Da lo mismo, porque la finalidad de esta utilidad, es descubrir las hojas ocultas de un libro, con independencia del libro de que se trate.

La forma de utilizar esta utilidad, es muy variada, pero la más sencilla es por ejemplo colocándola en nuestro libro personal de macros. De esa forma tendremos siempre disponible esta utilidad, para aplicarla en tantos libros como deseemos. Tan solo deberemos seleccionar el macro desde la opción de menú Herramientas, seleccionando Macro, a continuación Macros..., y seguidamente seleccionando el macro en cuestión.

Como usaremos un macro y un formulario, deberemos copiar ambos en el libro personal.

La idea es presentar un formulario donde se carguen a través de un combobox, todas las hojas ocultas del libro (si es que tiene alguna hoja oculta). Cuando ejecutemos esta utilidad, cargaremos un formulario como este:


Y cuando cliqueemos en el Combobox, se nos presentará el desplegable con las hojas ocultas que tiene el libro activo (normalmente el libro que tenemos en primer plano, o el libro con el que estamos trabajando):


Una vez hayamos seleccionado una hoja, y cliqueemos en el botón llamado "Hacer visible la hoja", el macro lo que hará es precisamente eso, hacer visible la hoja de tal forma que ya no esté oculta. También nos presentará un mensaje a través de un MsgBox, donde se nos informará de ello:



El código fuente para lanzar el Userform, es lo más sencillo que hay:


Sub mostrar_hojas_ocultas()
'Mostramos el formulario
UserForm1.Show
End Sub

Y el código del formulario, una vez lo hayamos diseñado, y tenga su Label, su ComboBox, y su CommandButton, tendrá un par de procedimientos. El primero de ellos será el que cargue las hojas ocultas en el combobox:

Private Sub ComboBox1_Enter()
'En caso de error, que continúe
On Error Resume Next
'Esto se producirá cuando nos
'situemos sobre el combobox1
'antes quitaremos todo lo que haya en el combobox1

ComboBox1.Clear
'Recorremos todas las hojas del libro
For i = 1 To Sheets.Count
'Ahora buscamos las hojas ocultas y las muy ocultas
If Sheets(i).Visible = xlSheetHidden Or Sheets(i).Visible = xlSheetVeryHidden Then
'las cargamos en el combobox
ComboBox1.AddItem Sheets(i).Name
End If
Next
End Sub

Y el otro, el código del CommandButton, es decir, del botón llamado "Hacer visible la hoja":

Private Sub CommandButton1_Click()
'Obtenemos el nombre de la hoja seleccionada
hoja_elegida = ComboBox1.List(ComboBox1.ListIndex)
'la hacemos visible
Sheets(hoja_elegida).Visible = True
'Mostramos un mensaje
MsgBox ("La hoja llamada " & hoja_elegida & ", la acabamos de hacer visible.")
End Sub

Muchos de vosotros os preguntaréis por qué en el código del combobox, en lugar de poner esta línea:

If Sheets(i).Visible = xlSheetHidden Or Sheets(i).Visible = xlSheetVeryHidden Then

No he puesto esta otra que es más sencilla y breve:

If Sheets(i).Visible = false Then

La respuesta es muy sencilla. Si utilizamos esta segunda opción, solo se nos cargarán en el combobox las hojas que esté ocultas (Hidden), pero no se nos cargarán las que estén muy ocultas (VeryHidden). Por eso, si queremos cargar en el combobox los nombres de todas las hojas ocultas, debemos utilizar la primera opción.

Desde aquí podéis descargar el fichero, con el ejemplo que hemos visto en este artículo.



9 comentarios:

juan dijo...

Muy interesante el programita, pero tengo un problemilla.

Me detecta la hoja que está oculta, pero cuando pincho en 'hacer visible la hoja' me aparece una ventana que dice:

Se ha producido el error '1004' en tiempo de ejecución:
No se puede asignar la propiedad Visible de la clase Worksheet.

Si le digo depurar me subraya la línea:

Sheets(hoja_elegida).Visible = True

¿puede que me salga esto porque la hoja además de oculta esté protegida? ¿cómo podría desprotegerla?

El pilt®afilla - www.3piesalgato.com dijo...

Pues creo que aunque estuviese protegida la hoja, no debería darte ese error.

Échale un vistazo al blog, que hay varios artículos que tratan el tema de la desprotección de hojas.

Un saludo.

juan dijo...

¡Acabo de desproteger el libro! ou yeea.

Por lo visto no solo tenía protegidas cada una de las hojas, sino también el libro, así que cuando lo he desprotegido (con la misma contraseña que conseguí para las hojas) me ha funcionado de maravilla.

Muchísimas gracias por crear un blog tan útil e instructivo, me lo apunto en favoritos.

Un saludete.

Francisco dijo...

como puedo hacer para oclutar la hoja en que estaba en un principio,
me explico
estoy en la hoja1 y hago visble la hoja2 y al mismo tiempo paso a ella, y quiero que la hoja1 que oculta.
de ante mano muchas grax y muy bueno el blog

El pilt®afilla - www.3piesalgato.com dijo...

Hola Francisco.

Échale un vistado z esta entrada donde se explica como mostrar y ocultar hojas.

Francisco dijo...

Thanx por la rapida respuesta.
Me funka de 10 ahora muchas gracias por tu ayuda

Anónimo dijo...

Mi problema es otro, tengo un programa en Excel, pero este está protegido, para ejecutarse correctamente necesita de una true type font file "creada", la cual tengo, si la instalo en C:\WINDOWS\Fonts, funciona el programa bien. Mis preguntas son:
1. ¿Puedo hacer funcionar el programa con otra true type fonts?
2. Podré hacer que mi programa “ande” pero en lugar de instalar la font en windows, instalarla en el USB (tengo que trabajar en distintos ordenadores y no van a dejar que entre en su windows) (no se como decirle al programa que la ubicación es otra)

Espero su respuesta mi email es
andoniandolini@yahoo.es

Muchas gracias.

EL CIEGO dijo...

REALICE UNA FACTURA Y QUIERO QUE AL INGRESAR LOS DATOS CON UN BOTON SE BORREN PARA DESPUES SEGUIR CARGANDO, LOS DATOS SE ENCUENTRAN EN DISTINTAS CELDAS.

seba.. dijo...

genial!!!
encontre justo la hoja oculta que por horas no pude solucionarla :D
es cierto ha pasado tiempo de tu post...
pero di con el y gracias!