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 Next [element] A sintaxe da instrução For…Each…Next possui as seguintes partes:
|
||||||
| 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:
|
||||||
| 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. |




qdo abro novamente dá a seguinte mesangem de erro:erro em tempo de execução’438′:
este objeto não aceita a propriedade ou metodo
Reply
exceldoseujeito Reply:
março 10th, 2009 at 12:27
Você editou alguma parte do código? Em que linha ocorre a depuração do script?
Somente com essas informações posso saber o que realmente ocorreu.
Abraço
Reply
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?
Reply
Reinaldo Coral Reply:
fevereiro 22nd, 2010 at 16:55
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
Reply
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
Reply
Reinaldo Coral Reply:
maio 21st, 2010 at 13:17
Ok Romeu.
Vou postar algo neste sentido.
Abraço
Reply
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
Reply