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.