Lomeutec - Tutoriais e Informação

Drop Down, VBA e auto preenchimento de campos no Word

  • Publicidade: Powered by Google

    Vou mostrar um exemplo no Microsoft Word 2003 e 2010 para fazer com que ao selecionarmos um item em um drop down seja feito o auto preenchimento de alguns campos. Não será usado nenhum arquivo externo como base de dados, tudo será feito no próprio Word através do uso de VBA. Essa é uma publicação complementar sobre "Usando combobox no Word 2003 e 2010" e "Recursos para criação de formulários no Word". Por isso se sugir alguma dúvida sugiro que as veja primeiro.

    Word

    Word 2003:

    Abra um documento novo do Word, depois crie uma tabela e campos como mostrado na imagem abaixo:


    Habilite também a barra de ferramentas de formulários. Para isso vá ao menu "Exibir", "Barra de ferramentas" e clique em "Formulários". Depois coloque na frente de "Veículo:" um campo drop down - Campo de formulário suspenso - enquanto que na frente de "Marca:", "Motor:", "Cor" e "Portas:" coloque campos de formulário de texto. Dê dois cliques rápidos no campo drop down que você inseriu na frente de "Veículo:" para abrir as suas opções. Adicione "Uno Mille", "C4 Pallas" e "Voyage". Confirme.


    Também dê dois cliques em cada campo de formulário de texto para abrir as suas opções e alterar o seu "Indicador". Por exemplo, no campo à frente de "Marca:" altere o indicador para "txtmarca", na frente de "Motor:" altere o indicador do campo de formulário de texto para "txtmotor", na frente de "Cor:" altere o indicador do campo de formulário de texto para "txtcor" e na frente de "Portas:" altere o indicador do campo de formulário de texto para "txtportas".


    Agora vá ao menu "Ferramentas", em "Macro" clique em "Editor do Visual Basic". Na janela que abrir clique em "ThisDocument" do lado esquerdo para que seja mostrado à direita o local que você deverá colar o código abaixo. Repare que o código tem comentários que estão em verde para explicar como ele funciona.

    Option Explicit

    Sub autopreenchimento()
       
        'Se escolher "Uno Mille" no Dropdown então
        If ActiveDocument.FormFields("Dropdown1").Result = "Uno Mille" Then
       
            'Faz o preenchimento dos campos
            ActiveDocument.FormFields("txtmarca").Result = "FIAT"
            ActiveDocument.FormFields("txtmotor").Result = "Álcool"
            ActiveDocument.FormFields("txtcor").Result = "Branco"
            ActiveDocument.FormFields("txtportas").Result = "2"
                   
        Else 'Se a escolha não foi "Uno Mille" então
       
               'Se a escolha foi "C4 Pallas" no Dropdown então
               If ActiveDocument.FormFields("Dropdown1").Result = "C4 Pallas" Then

                   'Faz o preenchimento dos campos       
                   ActiveDocument.FormFields("txtmarca").Result = "Citroën"
                   ActiveDocument.FormFields("txtmotor").Result = "Gasolina"
                   ActiveDocument.FormFields("txtcor").Result = "Preto"
                   ActiveDocument.FormFields("txtportas").Result = "4"
           
             Else 'Se a escolha não foi "Uno Mille" e nem "C4 Pallas" então

                    'Faz o preenchimento dos campos
                    ActiveDocument.FormFields("txtmarca").Result = "Volkswagen"
                    ActiveDocument.FormFields("txtmotor").Result = "Flex"
                    ActiveDocument.FormFields("txtcor").Result = "Prata"
                    ActiveDocument.FormFields("txtportas").Result = "4"

            End If
        End If

    End Sub

    Veja como fica no editor:


    Salve, feche o "Editor do Visual Basic" Clicando no ícone do Word - Primeiro ícone na barra de ferramentas - e abra as opções do campo de formulário de texto à frente de "Marca". Você deverá selecionar o nome da subrotina em "Saída". No nosso caso o nome da subrotina é "autopreenchimento".


    Faça a mesma coisa com os demais campos de formulários de texto e também com o campo drop down. Feito isso você já pode trancar o formulário clicando no ícone de cadeado - Proteger formulário - o último ícone da barra de formulários. Salve que já está pronto.


    Só tem um problema, depois de selecionar no drop down o item que você quer, os demais campos só serão atualizados se você clicar em um campo de formulário de texto, nada que incomode muito. Se não está funcionando pode ser que a segurança de macro do Word esteja bloqueando a função. Para resolver isso vá ao menu "Ferramentas" e clique em "Opções". Na janela que se abrir clique na aba "Segurança" e nessa aba clique no botão "Segurança de macro". Ao clicar nesse botão será aberta outra janela com mais duas abas. Na aba "Nível de segurança" selecione "Nível médio" e confirme. Assim quando for abrir o documento novamente, será perguntado se deseja habilitar as macros. Opte por habilitar.

    Vamos ver agora um outro exemplo, dessa vez faremos um campo drop down preencher outro campo drop down dependendo do que for selecionado no primeiro.

    Abra um novo documento do Word e coloque dois campos drop down. No primeiro insira as opções: Frutas, Legumes e Carnes. Em indicador escreva "Selecionado".

     

    Nas opções do segundo drop down digite "Resultado" no campo "Indicador".


    Agora abra o "Editor do Visual Basic" e cole o seguinte código em "ThisDocument". Veja que este código também está comentado para facilitar o entendimento.

    Option Explicit

    Sub Combina_DropDown()

     ' Declaração de variáveis do tipo texto como matriz
     Dim Frutas(3) As String
     Dim Legumes(3) As String
     Dim Carnes(3) As String

     ' Declaração de variáveis do tipo numérico
     Dim i As Integer
     Dim contador

        ' Variáveis sendo armazenadas em suas matrizes
        Frutas(0) = "Maçã"
        Frutas(1) = "Pêssego"
        Frutas(2) = "Pera"
        Frutas(3) = "Abacaxi"
       
        Legumes(0) = "Berinjela"
        Legumes(1) = "Nabo"
        Legumes(2) = "Cenoura"
        Legumes(3) = "Beterraba"
       
        Carnes(0) = "Bife"
        Carnes(1) = "Alcatra"
        Carnes(2) = "Picanha"
        Carnes(3) = "Pernil"
      
    ' Começa a verificar as condições dependendo do que for escolhido
    Select Case ActiveDocument.FormFields("Selecionado").DropDown.Value

        ' Caso seja escolhido Frutas então preencha o segundo Drop Down
        Case 1
            ActiveDocument.FormFields("Resultado").DropDown.ListEntries.Clear
                For contador = 1 To 4
                    ActiveDocument.FormFields("Resultado").DropDown.ListEntries.Add Name:=Frutas(i)
                    i = i + 1
                Next
            ActiveDocument.FormFields("Resultado").DropDown.Value = 1
           
        ' Caso seja escolhido Legumes então preencha o segundo Drop Down
        Case 2
            ActiveDocument.FormFields("Resultado").DropDown.ListEntries.Clear
                For contador = 1 To 4
                    ActiveDocument.FormFields("Resultado").DropDown.ListEntries.Add Name:=Legumes(i)
                    i = i + 1
                Next
            ActiveDocument.FormFields("Resultado").DropDown.Value = 1
           
        ' Caso seja escolhido Carnes então preencha o segundo Drop Down
        Case 3
            ActiveDocument.FormFields("Resultado").DropDown.ListEntries.Clear
                For contador = 1 To 4
                    ActiveDocument.FormFields("Resultado").DropDown.ListEntries.Add Name:=Carnes(i)
                    i = i + 1
                Next
            ActiveDocument.FormFields("Resultado").DropDown.Value = 1
    End Select

    End Sub

    Feito isso feche o "Editor do Visual Basic" para voltar ao documento do Word. Abra as opções do primeiro Drop Down, em "Saída:" selecione "Combina_DropDown" e dê "OK".


    Agora tranque o formulário, salve e faça o teste. Tudo já deve estar funcionado corretamente agora.


    E isso encerra a explicação sobre o Word 2003.

    _______________________________________

    Word 2010:

    Para fazer mesmo procedimento no Word 2010, leia toda a publicação. Serão mostradas somente as diferenças da interface que poderão gerar dúvidas. Os códigos usados são os mesmos.

    Para habilitar os recursos que você irá precisar, abra o Word, vá ao menu "Arquivo" e clique em "opções".



    Será aberta outra janela onde você deverá clicar em "Personalizar Faixa de Opções" e marcar a checkbox "Desenvolvedor".


    Feito isso ficará diponível a guia "Desenvolvedor" que possui as ferramentas de que precisamos. Os recursos usados na criação de formulários estão em "Controles". Crie os dois campos drop down (Caixa de Combinação - Controle de Formulário).

    Agora será necessário ler o que foi descrito acima na explicação sobre o Word 2003. Isso porque os procedimentos não diferem muito, então não ví necessidade de repetir toda a explicação. A diferença está na hora de trancar o documento. O Word 2010 não possui o ícone de cadeado nas ferramentas de formulários como no Word 2003. Para proteger o documento clique em "Restringir Edição" na aba "Desenvolvedor". Marque a checkbox "Permitir apenas este tipo de edição no documento" e seleciona abaixo "Preenchendo formulários". Clique em "Sim, Aplicar Proteção" e será solicidado que você coloque uma senha, essa senha é opcional bastando confirmar caso não queira nenhuma.


    Outra diferença está na hora de salvar. Por possuir comandos em VBA, o documento no Word 2010 deve ser salvo como "Documento Habilitado para Macro do Word" em "Salvar como". O Resultado final é visto abaixo.


    Se quiser baixar os exemplos desta publicação clique aqui e clique aqui.
    Senha para descompactar: lomeutec

    Por enquanto é só. :-)

    Nilton (LOMEUTEC)
    É formado como técnico em informática com ênfase em análise de sistemas e programação comercial. No entanto gosta mesmo é de fazer publicações para o blog lomeutec.blogspot.com onde compartilha grande parte do pouco conhecimento autodidata que adquire através de experiências, estudos diários e até mesmo de tudo aquilo que descobre enquanto navega despreocupadamente pela internet em seus momentos de ócio. Aqui no LTI acumula funções de publicador, moderador, editor, administrador e o que mais for possível e necessário.