Formulario para mostrar y ocultar hojas en Excel usando ListBox

Siguiendo con el tema de macros y formularios en Excel, en este artículo les comparto un formulario donde prodremos ocultar y mostrar hojas de manera dinámica.

Pasar elementos de un ListBox a otro

Nuestro formulario contrendrá dos ListBox donde los elementos serán los nombres de las hojas que haya en el archivo activo. Si elegimos el nombre de una hoja que se encuntra en el ListBox izquierdo (hojas visibles), lo podremos mover hacia el ListBox derecho (hojas ocultas).

image

Figura 1. Ocultar y mostrar hoja en Excel.

Libros protegidos

Tengamos en cuenta que si nuestro archivo tiene protegida su estructura o sus ventanas, Excel no nos permite realizar esto comandos de ocultar y mostrar hojas.

Para validar la protección del libro usamos la siguiente macro.

Option Explicit
'
Private Sub CommandButton1_Click()
'Declaramos variables
Dim VentanaProtegida As Boolean
Dim EstructuraProtegida As Boolean
'
With ActiveWorkbook
'
    'Damos valores a las variables
    VentanaProtegida = .ProtectWindows
    EstructuraProtegida = .ProtectStructure
    '
End With
'
'En caso de que el libro tenga la estructura protegida no contiúa.
If VentanaProtegida Or EstructuraProtegida Then
    MsgBox "Este comando no se puede ejecutar en un libro con estructura protegida.", _
           vbExclamation, "EXCELeINFO"
Else
    UserForm1.Show
End If
'
End Sub

Mostrar y ocultar hojas

Ya vimos que si elegimos un elemento de los ListBox éste se pasará al otro. Para que todo sea dinámico y no tengamos que salir del formulario para ver los cambios, en el momento en el que un elemento se pasa de ListBox veremos la acción de mostrar u ocultar.

Mostrar hojas

Figura 2. Ocultar y mostrar hojas en Excel dinámicamente.

Código de la macro

'---------------------------------------------------------------------------------------
' Module    : UserForm1
' Author    : Sergio Alejandro Campos. http://www.exceleinfo.com
' Date      : 10/10/2014
' Purpose   : Mostrar y ocultar hojas.
'---------------------------------------------------------------------------------------
'
Private Sub CommandButton1_Click()
Unload Me
End Sub
'
Private Sub CommandButton2_Click()
'
'Declaramos variables
Dim Cuenta As Integer
Dim Numero As Integer
Dim j As Integer
Dim i As Integer
Dim strNombreItem As String
'
Cuenta = Me.lstOcultas.ListCount
Numero = 0
'
'Validamos que haya un elemento seleccionado.
For j = 0 To Cuenta - 1
    If Me.lstOcultas.Selected(j) = True Then
        Numero = Numero + 1
    End If
Next j
'
If Numero <> 0 Then
    '
    'La hoja seleccionada se pasará al ListBox de hojas visibles.
    For i = 0 To Cuenta - 1
        If Me.lstOcultas.Selected(i) = True Then
            strNombreItem = Me.lstOcultas.List(i)
            Me.lstOcultas.RemoveItem i
            Me.lstVisibles.AddItem strNombreItem
            ActiveWorkbook.Sheets(strNombreItem).Visible = True
        End If
    Next i
    '
End If
'
End Sub

Private Sub CommandButton3_Click()
'
'Declaramos variables
Dim Cuenta As Integer
Dim Numero As Integer
Dim j As Integer
Dim i As Integer
Dim strNombreItem As String
'
Cuenta = Me.lstVisibles.ListCount
Numero = 0
'
'Validamos que haya un elemento seleccionado.
For j = 0 To Cuenta - 1
    If Me.lstVisibles.Selected(j) = True Then
        Numero = Numero + 1
    End If
Next j
'
If Cuenta = 1 Then
    MsgBox "Debe haber por lo menos una hoja visible.", vbExclamation, "EXCELeINFO"
Else
    '
    If Numero <> 0 Then
        '
        'La hoja seleccionada se pasará al ListBox de hojas visibles.
        For i = 0 To Cuenta - 1
            'If ListBox1.Selected(i) Then
            If Me.lstVisibles.Selected(i) = True Then
                strNombreItem = Me.lstVisibles.List(i)
                Me.lstVisibles.RemoveItem i
                Me.lstOcultas.AddItem strNombreItem
                ActiveWorkbook.Sheets(strNombreItem).Visible = False
            End If
        Next i
        '
    End If
End If
'
End Sub
'
Private Sub UserForm_Initialize()
'
Dim Hoja As Object
'
For Each Hoja In ActiveWorkbook.Sheets
    '
    If Hoja.Visible = True Then
        Me.lstVisibles.AddItem Hoja.Name
    Else
        Hoja.Visible = False
        Me.lstOcultas.AddItem Hoja.Name
    End If
    '
Next Hoja
'
End Sub

Anexos

:: Descarga Mostrar u Ocultar hojas.xlsm

También te podría gustar...