Exibir e Ocultar Planilhas

Vamos desenvolver, hoje, um arquivo onde as planilhas serão exibidas dinamicamente de acordo com a escolha feita pelo usuário. Todas as demais planilhas deste arquivo ficarão ocultas. Um exemplo, você tem um arquivo com três planilhas de setores diferentes. Teremos uma planilha principal, a qual definiremos como “Menu Principal”, onde posicionaremos um controle combobox, que conterá, a lista de todos os setores, definidos pelas outras 3 planilhas criadas. O usuário, ao selecionar um setor nessa caixa de listagem, será direcionado para a planilha respectiva.
Mãos a obra então.
Abra um novo arquivo do excel.

Adicione mais uma planilha. Renomeie- as da seguinte maneira: “Menu Principal”, “Setor A”, “Setor B” e “Setor C”. Adicione uma combobox da caixa de ferramentas de controle e dê o nome “cboSetores”.
Pressione ALT+F11 e abra o ambiente VBA.
Na janela do projeto, clique duas vezes no objeto Workbook (EstaPasta_de_trabalho) para exibir a janela de código referente a esta Pasta de Trabalho. Digite assim:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ActiveWorkbook.Unprotect "setores"  'Desprotege a pasta de trabalho
    Call RedefinirPlanilhas("Finalizar")  'Chama a rotina para ocultar as planilhas
                                        'e carregar a combobox
    ActiveWorkbook.Protect Structure:=True, Windows:=False, Password:="setores"  'Protege a pasta
                                                                'de trabalho, novamente
    ActiveWorkbook.Save
End Sub
Private Sub Workbook_Open()
    'Carregar ComboBox dos Setores
    ActiveWorkbook.Unprotect "setores"  'Desprotege a pasta de trabalho
    Call RedefinirPlanilhas("Iniciar")  'Chama a rotina para ocultar as planilhas
                                        'e carregar a combobox
    ActiveWorkbook.Protect Structure:=True, Windows:=False, Password:="setores"  'Protege a pasta
                                                                'de trabalho, novamente
End Sub

Agora, abra uma janela de código para a planilha “Menu Principal”, também com um duplo clique no objeto referente a essa planilha no VBAProject. Aberta a janela, escreva:

Private Sub cboSetores_Change()
Dim PlanEscolhida As String
PlanEscolhida = cboSetores.Text
    ActiveWorkbook.Unprotect "setores"  'Desprotege a pasta de trabalho
    Call RedefinirPlanilhas("Selecionar")  'Chama a rotina para ocultar as planilhas
                                        'e carregar a combobox
    Sheets(PlanEscolhida).Visible = True    'Reexibe a planilha escolhida
    Sheets(PlanEscolhida).Select    'Torna a planilha ativa
    ActiveWorkbook.Protect Structure:=True, Windows:=False, Password:="setores"  'Protege a pasta
                                                                'de trabalho, novamente
End Sub

Podemos, nesse momento, criar um módulo. Menu Inserir > Módulo. E escreva o código abaixo.

Sub RedefinirPlanilhas(ByVal Opção As String)
    'Percorre todas as planilhas
    For Each plan In ThisWorkbook.Worksheets
        'Exclui a planilha "menu principal" das ações executadas
        If Not plan.Name Like "Menu Principal" Then
            If Opção = "Iniciar" Then
                'Adiciona como item da combobox
                Sheets("Menu Principal").cboSetores.AddItem plan.Name
            End If
            'oculta a planilha
            plan.Visible = False
        End If
    Next
End Sub

Salve o arquivo e feche-o. Abra novamente e teste os resultados.
Um abraço a todos.

Termos aprendidos neste artigo:

For Each…Next

Repete um grupo de instruções para cada elemento em uma matriz ou coleção.

Sintaxe

For Each element In group
[statements]
[Exit For]
[statements]

Next [element]

A sintaxe da instrução For…Each…Next possui as seguintes partes:

Element Obrigatória. Variável usada para iterar através dos elementos da coleção ou matriz. Para coleções, element pode ser somente uma variável Variant, uma variável de objeto genérica ou qualquer variável de objeto específica. Para matrizes, element somente pode ser uma variável Variant.
Group Obrigatória. Nome de uma coleção ou matriz de objetos (exceto uma matriz de tipos definidos pelo usuário).
Statements Opcional. Uma ou mais instruções que são executadas em cada item de group
Visible Determina se o objeto será visível. Variant de leitura/gravação.

expressão.Visible

expressão necessária. Uma expressão que retorna um dos objetos acima.

Workbook.Protect Protege uma pasta de trabalho contra modificação.

expressão.Protect(Password, Structure, Windows)

Password Variant opcional. Uma seqüência de caracteres que especifica uma senha, que faz distinção entre maiúsculas e minúsculas, para a planilha ou pasta de trabalho. Se este argumento for omitido, você poderá desproteger a planilha ou pasta de trabalho sem usar uma senha. Caso contrário, será necessário especificar a senha para desproteger a planilha ou pasta de trabalho. Se você esquecer a senha, não poderá desproteger a planilha ou a pasta de trabalho. É uma boa idéia guardar uma lista de suas senhas e dos nomes de seus respectivos documentos em um lugar seguro.
Structure Variant opcional. True para proteger a estrutura da pasta de trabalho (a posição relativa das planilhas). O valor padrão é False.
Windows Variant opcional. True para proteger as janelas da pasta de trabalho. Se este argumento for omitido, as janelas não serão protegidas.

Workbook.Unprotect Método UnprotectRemove a proteção de uma planilha ou pasta de trabalho. Este método não tem efeito se a planilha ou pasta de trabalho não estiver protegida.

expressão.Unprotect(Password)

expressão necessária. Uma expressão que retorna um objeto Chart, Workbook ou Worksheet.
Password Variant opcional. Uma seqüência de caracteres que denote a senha (que pode usar maiúsculas e minúsculas) a ser usada para desproteger a planilha ou pasta de trabalho. Se a planilha ou pasta de trabalho não estiver protegida com uma senha, esse argumento será ignorado. Se você omitir este argumento para uma planilha que esteja protegida com uma senha, será solicitado a digitar a senha. Se você omitir este argumento para uma pasta de trabalho que esteja protegida com uma senha, o método falhará.

Change

Ocorre quando a propriedade Value é alterada.

Sintaxe

Private Sub objeto_Change( )

A sintaxe do evento Change possui as partes a seguir:

objeto Obrigatória. Um objeto válido.
Workbook_Open Evento OpenO Evento Open ocorre quando a pasta de trabalho é aberta.

Private Sub Workbook_Open()

Workbook_BeforeClose O Evento BeforeClose ocorre antes da pasta de trabalho ser fechada. Se a pasta de trabalho tiver sido alterada, esse evento ocorrerá antes do usuário ser solicitado a salvar alterações.

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Cancel False quando o evento ocorre. Quando o procedimento de evento define esse argumento como True, a operação de fechamento pára e a pasta de trabalho é deixada aberta.

7 comentários em “Exibir e Ocultar Planilhas”

  1. Ocorreu o mesmo comigo…
    Abaixo o códito editado e onde ocorre o erro…
    -Na pasta – Esta_pasta_de_trabalho
    Private Sub cboSetores_Change()
    Dim PlanEscolhida As String
    PlanEscolhida = cboAcesso.Text
    ActiveWorkbook.Unprotect “Geral”
    Call RedefinirPlanilhas(“Selecionar”)
    Sheets(PlanEscolhida).Visible = True
    Sheets(PlanEscolhida).Select
    ActiveWorkbook.Protect Structure:=True, Windows:=False, Password:=”Geral”
    End Sub
    – Na pasta da Planilha
    Private Sub cboSetores_Change()
    Dim PlanEscolhida As String
    PlanEscolhida = cboAcesso.Text
    ActiveWorkbook.Unprotect “Geral”
    Call RedefinirPlanilhas(“Selecionar”)
    Sheets(PlanEscolhida).Visible = True
    Sheets(PlanEscolhida).Select
    ActiveWorkbook.Protect Structure:=True, Windows:=False, Password:=”Geral”
    End Sub
    – Módulo 1
    Sub RedefinirPlanilhas(ByVal Opção As String)
    For Each plan In ThisWorkbook.Worksheets
    If Not plan.Name Like “Geral” Then
    If Opção = “Iniciar” Then
    Sheets(“Geral”).cboAcesso.AddItem plan.Name ‘é justamente aqui que ocorre o erro…
    End If
    plan.Visible = False
    End If
    Next
    End Sub
    Por favor… o que fiz de errado? qual o motivo de não ter dado certo?

    Responder
    • Roberto,
      Pelo que você postou no seu comentário, você escreveu duas vezes o código correspondente a planilha.
      O código de EstaPastaDeTrabalho deve ser para os eventos: Workbook_Open e Workbook_BeforeClose.
      Por favor, reescreva o código do Módulo EstaPastaDeTrabalho, ok!
      Vai dar certo.
      Abraço

      Responder
  2. Parabéns pela as dicas no site, muito bom!
    Será que poderia postar Alguma coisa de formulário de cadastro, pesquisa e edição buscando em mais de uma região na própria planilha.
    Romeu

    Responder
  3. Como faço? (Veja o exemplo abaixo)
    Estou querendo adicionar mais um combobox, sendo que o primeiro combobox MOSTRA na GUIA “SETOR A, SETOR B e SETOR C. E no segundo combobox ficasse o SETOR D, SETOR E e SETOR F.
    Tem como?
    Grato

    Responder

Deixe uma resposta para Adriano Cancelar resposta