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.
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
- 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 SubExecute esta macro uma vez para armazenar os parâmetros no documento.
- 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 SubExecute ProcessInvoice para ver os parâmetros exibidos.
- 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
- 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, digitetxtCustomer. Defina o Tipo como Texto Normal. Clique em OK. - 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 comoddlRegion. Clique em Adicionar para inserir itens como Norte, Sul, Leste, Oeste. Clique em OK. - 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 SubExecute a macro após preencher os campos do formulário.
- 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
- Selecione texto no documento
Destaque qualquer palavra ou frase no corpo do documento. - 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 - 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.
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.