Como fazer filtro em caixa de combinação
Para aqueles que gostam de utilizar formulários no Word darei aqui um exemplo de como filtrar dados de uma Caixa de Combinação de modo que ao selecionar um item desta Caixa de Seleção seja automaticamente carregado em uma outra Caixa de Combinação ou Caixa de Listagem somente os itens correspondentes ao item selecionado na primeira Caixa de Seleção.
Para o exemplo deste tutorial utilizaremos duas Caixa de Combinação, a primeira conterá uma lista com algumas marcas de automóveis e a segunda será automaticamente preenchida com a listagem dos modelos de carros referente a marca selecionada na primeira Caixa de Combinação.
Inserindo os controles de formulários
Para inserir os controles de formulário acione a guia Desenvolvedor e no grupo Controles clique em Ferramentas Herdadas como mostra a imagem abaixo:
Nos Formulários Herdados clique em Caixa de Combinação para inserir o primeiro e o segundo controle de formulário, ou seja, vamos inserir duas caixas de combinação.
Deverá ficar como na imagem abaixo:
Clique com o botão direito do mouse sobre a primeira caixa de combinação e em seguida clique em Propriedades.
Na Caixa de Diálogo Opções do campo de formulário suspenso vamos adicionar as marcas de automóveis que iremos utilizar neste exemplo.
Em Item suspenso digite na caixa de texto a marca do automóvel e clique em Adicionar. Repita esse procedimento até que todas as marcas de automóveis estejam dentro da caixa de listagem de Itens na lista suspensa. Mantenha selecionado a opção Suspenso habilitado.
No exemplo deste tutorial utilizaremos as seguintes marcas: CHEVROLET, FIAT, FORD, TOYOTA e VOLKSWAGEN.
Criando a macro para filtrar os dados na Caixa de Combinação
Para criar uma macro no Word usando recursos VBA você deve abrir o Editor do Visual Basic através do atalho ALT + F11 ou clicando na Guia Desenvolvedor e no grupo Código clicar em Visual Basic.
No Editor do Visual Basic insira um novo módulo clicando no menu Inserir e depois em Módulo.
Dentro do módulo adicione o seguinte código:
Sub filtragem()
'Declara as variáveis
Dim sValor As String
Dim sLista As ListEntries
sValor = ActiveDocument.FormFields("Dropdown1").Result
Set sLista = ActiveDocument.FormFields("DropDown2").DropDown.ListEntries
On Error GoTo filtragem_Click_Err
'Condição para o preenchimento da segunda Caixa de Combinação
If sValor = "" Then
ActiveDocument.FormFields("Dropdown2").Result= ""
ElseIf sValor = "CHEVROLET" Then
With sLista
.Clear
.Add Name:="Chevrolet Camaro"
.Add Name:="Chevrolet Cruze"
.Add Name:="Chevrolet Montana"
.Add Name:="Chevrolet Onix"
.Add Name:="Chevrolet S10"
End With
ElseIf sValor = "FIAT" Then
With sLista
.Clear
.Add Name:="Fiat Argo"
.Add Name:="Fiat Cronos"
.Add Name:="Fiat Mobi"
.Add Name:="Fiat Toro"
.Add Name:="Fiat Uno"
End With
ElseIf sValor = "FORD" Then
With sLista
.Clear
.Add Name:="Ford Courier"
.Add Name:="Ford Ecosport"
.Add Name:="Ford Fiesta"
.Add Name:="Ford Fusion"
.Add Name:="Ford KA"
End With
ElseIf sValor = "TOYOTA" Then
With sLista
.Clear
.Add Name:="Toyota Camry"
.Add Name:="Toyota Corola"
.Add Name:="Toyota Etios"
.Add Name:="Toyota Hilux"
.Add Name:="Toyota SW4"
End With
ElseIf sValor = "VOLKSWAGEN" Then
With sLista
.Clear
.Add Name:="Volkswagen Amarok"
.Add Name:="Volkswagen Gol"
.Add Name:="Volkswagen Polo"
.Add Name:="Volkswage Saveiro"
.Add Name:="Volkswagen Voyage"
End With
End If
Set oListEntries = Nothing
'Em caso de erro
filtragem_Click_Fim:
Exit Sub
filtragem_Click_Err:
MsgBox "Erro n. " & Err.Number & " - " & Err.Description
Resume filtragem_Click_Fim
End Sub
Explicando a macro
Primeiramente declaramos duas variáveis, a variável sValor como String (tipo de dado recomendado para armazenar texto no VBA) e a variável sLista como ListEntries (representa todos os itens de um formulário suspenso, por exemplo: Caixa de Combinação, Caixa de Listagem).
A variável sValor recebe o dado do item selecionado no primeiro campo de formulário, ou seja, da primeira Caixa de Combinação.
Utilizamos a instrução Set para atribuir uma referência de um objeto a uma variável que neste caso faz referência ao segundo campo de formulário, portanto, a variável sLista vai armazenar os itens da segunda Caixa de Combinação.
Usamos a condicional IF para condicionar o preenchimento dos itens segunda Caixa de Combinação, ou seja, a relação de itens será de acordo com o item selecionado na primeira Caixa de Combinação
A macro será executada quando o foco sair da primeira caixa de combinação, portanto, agora devemos associar essa macro ao evento de saída da primeira Caixa de Combinação.
Feche o Editor do Visual Basic clicando no menu Arquivos e depois em Fechar e voltar para Microsoft Word.
Estando de volta ao Word clique com o botão direito do mouse sobre a primeira Caixa de Combinação e depois clique em Propriedades.
Nas Opções de campo de formulário suspenso vá até Executar macro em e em Saída selecione a macro filtragem e clique no botão OK como mostra a imagem abaixo.
Proteger o Formulário
Agora é necessário proteger o formulário.
Na Guia Desenvolvedor e no Grupo Proteger clique em Restringir Edição ou através da guia Revisão e no grupo Proteger clique em Restringir Edição.
Note que ao lado direito surgiu uma janela para configurações de proteção.
Em Restrições de edição tique em Permitir apenas este tipo de edição no documento: e na caixa de listagem selecione Preenchendo formulários.
E para finalizar clique no botão Sim, Aplicar Proteção, defina uma senha e depois dê um OK.
Faça o download do exemplo utilizado neste tutorial: Download