TL;DR —
ws.Visible = xlSheetHiddenoculta una hoja;xlSheetVisiblela vuelve a mostrar. Hay un tercer estado,xlSheetVeryHidden, que saca la hoja del cuadro de diálogo Mostrar, de modo que solo el código o el editor de VBA pueden recuperarla. Los tres cambian lo que ve el usuario, no lo que es la hoja: una hoja oculta sigue calculando, sigue alimentando cada fórmula que apunta a ella y se puede leer y escribir por completo desde código. Excel se niega a ocultar la última hoja visible (error 1004), y no puedes hacerSelectsobre una oculta, aunque nunca te hace falta. Oculta hojas para ordenar un libro; si el contenido tiene que ser secreto, no debería estar en el archivo.
Sub HideHelperSheets()
With ThisWorkbook
.Worksheets("Lookups").Visible = xlSheetHidden ' el usuario puede mostrarla con clic derecho
.Worksheets("Config").Visible = xlSheetVeryHidden ' no aparece en el cuadro Mostrar
End With
End Sub
Este es el segundo de una serie de tres artículos sobre la identidad de una hoja. El nombre de la pestaña es
una etiqueta que pertenece al usuario. Renombrar cambia esa etiqueta,
ocultar, que es lo que vemos aquí, quita la pestaña de la vista sin dejar la hoja fuera de alcance, y
comprobar si una hoja existe pregunta si una etiqueta ya está ocupada.
El hilo que une los tres: la fila de pestañas es una vista de la colección Sheets. Ocultar edita la
vista; la colección no cambia.
Lo que aprenderás
- El modelo mental: ocultar edita la vista, no el libro
- Los tres estados de
Visibley qué permite cada uno - Los dos errores: la última hoja visible y seleccionar una hoja oculta
- Trabajar con hojas ocultas sin mostrarlas nunca
- Mostrar todas las hojas con un solo bucle, y ocultar todas menos una
- Por qué ni oculta ni muy oculta es seguridad, y qué hacer en su lugar
El modelo mental: ocultar edita la vista
Las hojas de un libro viven en la colección Sheets. La fila de pestañas de abajo es una vista de esa
colección, y ocultar quita una pestaña de la vista, nada más. La hoja conserva su lugar en la colección, su
índice, su nombre, sus fórmulas y sus datos. Por tanto:
- Una fórmula como
=Lookups!B2sigue funcionando cuandoLookupsestá oculta. Worksheets.Countla sigue contando, yWorksheets(2)bien puede ser una hoja oculta.- Un bucle For Each sobre
Worksheetspasa por ella. - El código puede leer y escribir sus celdas exactamente igual que antes.
Por eso ocultar es la herramienta adecuada para las hojas auxiliares —tablas de búsqueda, configuración, datos intermedios— y la equivocada para cualquier cosa que necesites proteger. Es la versión a nivel de hoja de ocultar columnas: cero presencia en pantalla, presencia total en el libro.
Los tres estados de Visible
Visible admite una de tres constantes XlSheetVisibility:
| Constante | Valor | Pestaña visible | En el cuadro Mostrar | Quién puede volver a mostrarla |
|---|---|---|---|---|
xlSheetVisible |
-1 | sí | — | — |
xlSheetHidden |
0 | no | sí | cualquiera, con clic derecho > Mostrar |
xlSheetVeryHidden |
2 | no | no | el código, o la ventana Propiedades del editor de VBA |
ws.Visible = False también funciona y equivale a xlSheetHidden, pero escribe las constantes: True y
False no pueden expresar el tercer estado, y quien lea el código no debería tener que recordar que False
es 0.
Muy oculta es el estado útil para las herramientas que construyes. El usuario nunca ve la hoja en la lista, así que no muestra tu configuración por curiosidad ni la edita por accidente. Para fijarlo sin código, selecciona la hoja en el Explorador de proyectos del editor de VBA y cambia Visible en la ventana Propiedades.
Los dos errores con los que te vas a topar
Ocultar la última hoja visible. Un libro siempre tiene que mostrar al menos una hoja. Ocultar la única visible lanza el error en tiempo de ejecución 1004, Unable to set the Visible property of the Worksheet class. Las hojas ocultas y muy ocultas no cuentan, así que un libro con una hoja visible y diez ocultas se sigue negando. Cuando ocultes hojas en un bucle, asegúrate de que la hoja que debe quedar visible lo esté antes de que empiece el bucle.
Seleccionar una hoja oculta. Worksheets("Lookups").Select sobre una hoja oculta lanza el error 1004. Lo
mismo pasa al seleccionar un rango dentro de ella. La solución no es mostrarla primero, sino no seleccionar
en absoluto:
' Mal: seleccionar una hoja oculta para escribir en ella
' Worksheets("Lookups").Select
' Range("A1").Value = "Actualizado"
' Bien: escribir a traves de una referencia; la hoja sigue oculta
ThisWorkbook.Worksheets("Lookups").Range("A1").Value = "Actualizado"
La guía de Select y Activate explica por qué este es el mejor hábito también
con las hojas visibles. Hay un tercer error, más raro: si la estructura del libro está protegida, cambiar
la propiedad Visible de cualquier hoja falla hasta que llamas a Unprotect sobre el libro.
Muestra todas las hojas, u oculta todas menos una
El cuadro de diálogo Mostrar solo puede listar las hojas que están en xlSheetHidden. Para recuperarlo
todo, incluidas las hojas muy ocultas, recorre la colección Sheets —Sheets, no Worksheets, para que
también vuelvan las hojas de gráfico—:
Sub UnhideAllSheets()
Dim sh As Object
For Each sh In ThisWorkbook.Sheets
sh.Visible = xlSheetVisible
Next sh
End Sub
Lo contrario —mostrar un panel y ocultar todo lo demás— tiene que respetar la regla de la última hoja visible, así que el orden importa. Muestra primero la que se queda y luego oculta el resto:
Sub ShowOnly(keep As Worksheet)
Dim sh As Object
keep.Visible = xlSheetVisible ' primero, para que siempre haya una hoja visible
For Each sh In keep.Parent.Sheets
If Not sh Is keep Then sh.Visible = xlSheetVeryHidden
Next sh
keep.Activate
End Sub
keep.Parent es el libro al que pertenece la hoja, así que la rutina funciona en cualquier libro abierto, no
solo en el que contiene el código.
La decisión: ocultar es presentación, no seguridad
Es tentador tratar «muy oculta» como un candado. No lo es. Cualquiera puede abrir el editor de VBA con
Alt+F11, ver la hoja muy oculta en el Explorador de proyectos y volver a ponerla visible. Bloquear el
proyecto de VBA con contraseña cierra esa puerta a los usuarios ocasionales, y Proteger la estructura del
libro impide el Mostrar del clic derecho, pero los datos siguen estando en el archivo. Cualquier
herramienta que lea archivos .xlsx directamente, desde Power Query hasta un script de Python, lee todas las
hojas sin importar su propiedad Visible, y las hojas ocultas viajan con cada copia del libro que envías.
Mi regla: oculta para reducir el desorden y evitar accidentes; elimina para guardar secretos. Usa «muy oculta» para la configuración con la que el usuario no debería tropezarse, añade la protección de la estructura si quieres que el menú Mostrar aparezca atenuado, y nunca envíes tablas de salarios, precios de coste ni credenciales en una hoja oculta. Si el destinatario no debe verla, elimínala de la copia que envías: la guía de Delete Sheet muestra cómo hacerlo sin el aviso de confirmación.
Cómo te ayuda ExcelMaster
Los fallos de visibilidad son silenciosos: una macro que se detiene con el error 1004 solo cuando el usuario ya había ocultado las demás hojas, un informe que selecciona una hoja oculta y falla en un equipo concreto, una hoja de precios «secreta» que acabó en manos de un cliente dentro del libro.
ExcelMaster te deja describir lo que quieres —«muestra solo la hoja Dashboard, deja muy ocultas las hojas de configuración y protege la estructura»— y escribe el código de visibilidad en el orden que nunca choca con la regla de la última hoja visible, trabajando con las hojas ocultas a través de referencias en lugar de seleccionarlas.
Preguntas frecuentes
¿Cómo oculto una hoja con VBA?
Asigna su propiedad Visible: Worksheets("Data").Visible = xlSheetHidden. El usuario puede volver a
mostrarla con clic derecho > Mostrar. Usa xlSheetVeryHidden si la hoja no debe aparecer en absoluto en el
cuadro de diálogo Mostrar, y xlSheetVisible para volver a mostrarla.
¿Qué diferencia hay entre oculta y muy oculta?
Una hoja oculta aparece en el cuadro de diálogo Mostrar, así que cualquier usuario puede recuperarla. Una hoja muy oculta no aparece ahí; solo el código o la ventana Propiedades del editor de VBA pueden volver a hacerla visible. Las dos siguen calculando y las dos son totalmente accesibles desde código.
¿Cómo muestro todas las hojas en VBA?
Recorre la colección Sheets con For Each y asigna sh.Visible = xlSheetVisible a cada hoja. Así también
recuperas las hojas muy ocultas y las hojas de gráfico, que el cuadro de diálogo Mostrar no puede traer de
vuelta.
¿Por qué obtengo el error 1004 al ocultar una hoja?
Lo más habitual es que sea la última hoja visible, y un libro siempre tiene que mostrar al menos una. Haz visible otra hoja primero. La otra causa es que la estructura del libro esté protegida, lo que bloquea cualquier cambio en la visibilidad de las hojas hasta que se desprotege el libro.
¿Puede VBA leer y escribir en una hoja oculta?
Sí. Ocultar solo quita la pestaña de la vista, así que Worksheets("Data").Range("A1").Value funciona igual
en una hoja oculta. Lo que falla es Select o Activate, que no necesitas: escribe a través de una
referencia y la hoja se queda oculta.
Probado en
Probado en: Excel 365 (Windows 11), VBA 7.1 — última verificación el 30/09/2026.
Guías relacionadas: VBA Rename Sheet · VBA Check If Sheet Exists · VBA Hide Columns · VBA Worksheets · VBA Delete Sheet · VBA Protect Sheet · VBA Select and Activate · VBA For Each
