Como Passar Parâmetros para uma Macro VBA a Partir do Documento
🔍 WiseChecker

Como Passar Parâmetros para uma Macro VBA a Partir do Documento

Você tem um documento do Word e deseja executar uma macro VBA que use valores do próprio documento. Em vez de editar o código da macro sempre que precisar de uma entrada diferente, você pode passar parâmetros diretamente do conteúdo do documento. Este artigo explica três métodos confiáveis para enviar dados do seu documento para uma macro VBA: usando variáveis de documento, campos de formulário e texto selecionado. Você aprenderá a configurar cada método e escrever o código da macro que lê os parâmetros.

Principais Conclusões: Passar Parâmetros para uma Macro VBA a Partir de um Documento Word

  • Variáveis de documento (coleção Variables): Armazenam pares chave-valor dentro do documento que as macros podem ler sem interação do usuário.
  • Campos de formulário (DropDown, TextInput, CheckBox): Permitem que os usuários selecionem ou digitem valores que uma macro recupera por meio da coleção FormFields.
  • Texto selecionado (Selection.Range.Text): Passa o texto atualmente destacado como um parâmetro para uma macro que o processa.

ADVERTISEMENT

Entendendo Como os Parâmetros São Passados do Documento para uma Macro VBA

Normalmente, uma macro VBA é executada com argumentos fixos ou nenhum argumento. Para tornar a macro dinâmica, você precisa de uma forma de injetar dados do documento na macro em tempo de execução. O Word fornece vários objetos internos que armazenam dados dentro do próprio arquivo do documento ou que refletem a seleção atual do usuário. Esses objetos atuam como a ponte entre o conteúdo do documento e o código VBA.

Os três mecanismos principais são variáveis de documento, campos de formulário e o objeto Selection. As variáveis de documento são pares chave-valor invisíveis que acompanham o documento. Os campos de formulário são controles interativos visíveis que os usuários preenchem. O objeto Selection reflete qualquer texto que o usuário tenha destacado no momento em que a macro é executada. Cada método tem um caso de uso e procedimento de configuração diferentes.

Variáveis de Documento

Uma variável de documento é uma string oculta armazenada no documento. Você a define usando VBA ou uma macro rápida, e qualquer outra macro pode lê-la. A variável persiste quando você salva e reabre o documento. Use este método quando o valor do parâmetro não mudar com frequência ou quando você quiser defini-lo programaticamente antes da macro principal ser executada.

Campos de Formulário

Os campos de formulário do Word incluem caixas de texto, listas suspensas e caixas de seleção. Eles fazem parte do conteúdo do documento e podem ser protegidos para que os usuários apenas preencham os campos. Uma macro lê o valor atual de qualquer campo de formulário usando a coleção ActiveDocument.FormFields. Este método funciona bem quando você deseja que o usuário escolha ou digite o valor do parâmetro.

Texto Selecionado

Quando o usuário seleciona texto no documento, o objeto Selection captura esse intervalo. Você pode passar o texto selecionado como um parâmetro de string para uma macro. Este método é o mais simples de implementar, pois não requer configuração especial do documento. Use-o quando a macro processar qualquer texto que o usuário destacar.

Configurando Cada Método para Passar Parâmetros

Siga as etapas abaixo para implementar cada método de passagem de parâmetros. Você deve habilitar a guia Desenvolvedor no Word primeiro: vá em Arquivo > Opções > Personalizar Faixa de Opções e marque a caixa Desenvolvedor.

Método 1: Usando Variáveis de Documento

  1. Crie uma macro para definir uma variável de documento
    Abra o editor VBA com Alt+F11. Insira um novo módulo e cole este código:
    Sub SetDocVar()
        ActiveDocument.Variables("CustomerName") = "Acme Corp"
        ActiveDocument.Variables("InvoiceTotal") = "1250.75"
        ActiveDocument.Save
    End Sub

    Execute esta macro uma vez para armazenar os parâmetros no documento.

  2. Crie a macro principal que lê as variáveis
    Adicione este código ao mesmo módulo:
    Sub ProcessInvoice()
        Dim custName As String
        Dim invTotal As String
        custName = ActiveDocument.Variables("CustomerName").Value
        invTotal = ActiveDocument.Variables("InvoiceTotal").Value
        MsgBox "Cliente: " & custName & vbCrLf & "Total: " & invTotal
    End Sub

    Execute ProcessInvoice para ver os parâmetros exibidos.

  3. Atualize o valor da variável
    Para alterar o parâmetro, edite a macro SetDocVar com o novo valor e execute-a novamente. O valor atualizado fica disponível para qualquer macro que leia a variável.

Método 2: Usando Campos de Formulário

  1. Insira um campo de formulário de texto no documento
    Na guia Desenvolvedor, clique no botão Ferramentas Legadas (o ícone de caixa de ferramentas). Em Formulários Legados, clique no botão Campo de Formulário de Texto. Uma caixa de texto sombreada aparece. Clique com o botão direito nela e escolha Propriedades. Na caixa Indicador, digite txtCustomer. Defina o Tipo como Texto Normal. Clique em OK.
  2. Insira um campo de formulário suspenso
    Clique em Ferramentas Legadas novamente e selecione Campo de Formulário Suspenso. Clique com o botão direito no campo e escolha Propriedades. Defina o Indicador como ddlRegion. Clique em Adicionar para inserir itens como Norte, Sul, Leste, Oeste. Clique em OK.
  3. Crie a macro que lê os campos de formulário
    Abra o editor VBA e adicione este código:
    Sub ProcessFormData()
        Dim customer As String
        Dim region As String
        customer = ActiveDocument.FormFields("txtCustomer").Result
        region = ActiveDocument.FormFields("ddlRegion").Result
        MsgBox "Cliente: " & customer & vbCrLf & "Região: " & region
    End Sub

    Execute a macro após preencher os campos do formulário.

  4. Proteja o documento para preenchimento de formulário (opcional)
    Na guia Desenvolvedor, clique em Restringir Edição. Em Restrições de edição, marque Permitir apenas este tipo de edição no documento e escolha Preenchimento de formulários. Clique em Sim, Aplicar Proteção. Os usuários só podem interagir com os campos do formulário.

Método 3: Usando Texto Selecionado

  1. Selecione texto no documento
    Destaque qualquer palavra ou frase no corpo do documento.
  2. Crie a macro que captura a seleção
    No editor VBA, adicione este código:
    Sub ProcessSelection()
        Dim selectedText As String
        selectedText = Selection.Range.Text
        ' Remove a marca de parágrafo final, se presente
        If Right(selectedText, 1) = vbCr Then
            selectedText = Left(selectedText, Len(selectedText) - 1)
        End If
        MsgBox "Você selecionou: " & selectedText
    End Sub
  3. Atribua a macro a um atalho de teclado ou botão
    Vá em Arquivo > Opções > Personalizar Faixa de Opções. Clique em Personalizar ao lado de Atalhos do Teclado. Em Categorias, selecione Macros. Em Macros, selecione ProcessSelection. Pressione um atalho como Alt+Shift+S e clique em Atribuir. Agora você pode selecionar texto e pressionar o atalho para executar a macro.

ADVERTISEMENT

Problemas Comuns ao Passar Parâmetros de um Documento

Variável de Documento Retorna uma String Vazia

Se a variável nunca foi definida, a leitura retorna uma string vazia. Sempre execute a macro que define a variável antes da macro que a lê. Para evitar erros, verifique se a variável existe com On Error Resume Next ou itere pela coleção Variables.

Resultado do Campo de Formulário Contém Espaços ou Quebras de Linha Extras

A propriedade Result retorna o texto exato digitado pelo usuário. Remova espaços iniciais e finais com a função Trim em sua macro. Se o campo contiver uma quebra de linha, substitua-a por um espaço usando Replace.

Seleção Inclui Caracteres Não Imprimíveis

Quando o usuário seleciona texto que inclui o marcador de fim de célula em uma tabela ou a marca de fim de parágrafo, a propriedade Selection.Range.Text inclui esses caracteres. Use o código mostrado no Método 3 para remover a marca de parágrafo final. Para células de tabela, verifique se Selection.Information(wdWithinTable) é True e trate adequadamente.

Comparação: Variáveis de Documento vs Campos de Formulário vs Texto Selecionado

Item Variáveis de Documento Campos de Formulário Texto Selecionado
Esforço de configuração Baixo (apenas macro VBA) Médio (inserir campos, definir propriedades) Baixo (nenhuma configuração necessária)
Interação do usuário Nenhuma (oculta) Necessária (usuário preenche) Necessária (usuário seleciona texto)
Persistência do parâmetro Sim (salvo com o documento) Sim (salvo com o documento) Não (perdido quando a seleção muda)
Melhor para Parâmetros fixos ou definidos programaticamente Entrada orientada pelo usuário com opções controladas Processamento rápido e único do conteúdo destacado

Agora você pode passar parâmetros do seu documento Word para uma macro VBA usando variáveis de documento, campos de formulário ou texto selecionado. Escolha o método que se adequa ao seu fluxo de trabalho. Como próximo passo, explore como passar parâmetros para uma macro a partir de uma célula de tabela do Word combinando a propriedade Selection.Information(wdStartOfRangeColumnNumber) com a coleção Cells. Uma dica avançada: use variáveis de documento para armazenar os valores de parâmetros usados pela última vez, para que a macro se lembre deles entre execuções.

ADVERTISEMENT