Exemplos de macros do Word e tutorial VBA
In this Article
Bem-vindo ao nosso Mega-Guia de Macros / VBA do Word!
Esta página contém:
-
- PDF do tutorial do Word VBA (download gratuito)
- “Folha de Dicas” do Word VBA contendo uma lista dos trechos de código do Word VBA mais comumente usados
- Tutorial completo de Word VBA / Macro.
- Lista pesquisável de todos os nossos tutoriais de macro do Word VBA
Talvez você também se interesse pelo nosso Tutorial interativo de VBA para Excel. Embora alguns dos exemplos/exercícios sejam específicos do VBA para Excel, grande parte do conteúdo é genérico para todo o VBA e pode ser útil para aprender conceitos como instruções If, loops, MessageBoxes e outros.
PDF sobre VBA (Downloads Gratuitos)
Baixe nosso tutorial gratuito de VBA do Microsoft Word! Ou tutoriais de VBA para outros programas do Office!
Exemplos de VBA do Word “Folha de Dicas”
A seguir, você encontrará exemplos simples de código VBA para trabalhar com o Microsoft Word.
Selecionar / Ir para
Selection.Extend
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Marcadores
.Add Range:=Selection.Range, Name:=”Name”
.DefaultSorting = wdSortByName
showHidden = False
End With
n = ActiveDocument.Bookmarks.Count
‘Fazer algo
End If
Selection.Delete Unit:=wdCharacter, Count:=1
Selection.InsertAfter“Novo texto”
ActiveDocument.Bookmarks.Add Range:=Selection.Range, _
Name:=”BookmarkName”
Documentos
Set doc = Documents.Add
NewTemplate:=False
Colunas
varNumberPages = _
ActiveDocument.Content.Information(wdActiveEndAdjustedPageNumber)
Fontes
Inserir
Selection.Range.InsertAutoText
Loops
‘Fazer algo
Sub
ForEachdoc In Documents
‘Faça algo
Next doc
Dim i As Long, iParCount As Long
iParCount = ActiveDocument.Paragraphs.CountFori= 1 To iParCount
ActiveDocument.Paragraphs(i).Alignment = wdAlignParagraphLeft
Next i
Parágrafo
.LineSpacingRule = wdLineSpaceExactly
.LineSpacing = 12
End With
Dim i As Long, iParCount As Long
iParCount = ActiveDocument.Paragraphs.CountFori= 1 To iParCount
ActiveDocument.Paragraphs(i).Alignment = wdAlignParagraphLeft
Next i
Tutorial de Macro VBA do Word
Este é um tutorial sobre o uso do VBA no Microsoft Word. Este tutorial o ensinará a escrever uma macro simples e a interagir com documentos, intervalos, seleções e parágrafos.
Observação: Se você não tem experiência com macros/VBA, talvez este artigo também seja útil: Como escrever macros VBA do zero.
VBA é a linguagem de programação usada para automatizar os programas do Microsoft Office, incluindo Word, Excel, Outlook, PowerPoint e Access.
Macros são blocos de código VBA que executam tarefas específicas.
Quando você Grava uma macroo Word gravará o código VBA em uma Macro, permitindo que você repita suas ações. Você pode ver uma lista de todas as Macros disponíveis em Exibir > Macros.
Depois de gravar uma Macro, você poderá editá-la na Lista de Macros:
Quando você clica em Editar, abre o Editor VBA. Usando o VBA Editor, você pode editar as Macros gravadas ou escrever uma Macro do Word do zero. Para acessar o VBA Editor, use o atalho ALT + F11 ou clique em Visual Basic na Faixa de Opções do Desenvolvedor.
Exemplo de Macro Simples do Word
Este é um exemplo simples de uma macro VBA do Word. Ela executa as seguintes tarefas:
- Abre um documento do Word
- Escreve no documento
- Fecha e salva o documento do Word.
Sub ExemploMacroWord()
'Abrir documento e atribuir a variável
Dim oDoc As Document
Set oDoc = Documents.Open("c:\Usuarios\Alguem\NovoDocumento.docx")
'Escrever no documento
Selection.TypeText "www.automateexcel.com"
Selection.TypeParagraph
'Salvar e fechar documento
oDoc.Save
oDoc.Close
End Sub
Noções básicas de macro do Word
Todo código VBA deve ser armazenado em procedimentos como este. Para criar um procedimento em VBA, digite “Sub ExemploMacroWord” (onde “ExemploMacroWord” é o nome da macro desejada) e pressione ENTER. O VBA adicionará automaticamente os parênteses e o End Sub.
Objeto de Documento do Word
Ao interagir com o Microsoft Word em VBA, você frequentemente fará referência a “objetos” do Word. Os objetos mais comuns são:
Application Object – o próprio Microsoft Word
Document Object – um documento do Word
Range Object – Uma parte de um documento do Word
Selection Object – Um intervalo selecionado ou local do cursor.
Application
Application é o objeto de “nível superior”. Todos os outros objetos do Word podem ser acessados por meio dele.
Além de acessar outros objetos do Word, há configurações de “nível de aplicativo” que podem ser aplicadas:
Application.Options.AllowDragAndDrop = True
Este é um exemplo de acesso à “Seleção” do “Windows(1)” no aplicativo:
Application.Windows(1).Selection.Characters.Count
No entanto, os objetos mais comuns do Word podem ser acessados diretamente, sem a necessidade de digitar a hierarquia completa. Portanto, em vez disso, você pode (e deve) apenas digitar:
Selection.Characters.Count
Documentos
ActiveDocument
Muitas vezes, você terá dois ou mais documentos abertos no Word e precisará especificar com qual documento específico do Word deve interagir. Uma maneira de especificar o documento é usar o ActiveDocument. Por exemplo:
ActiveDocument.PrintOut
…imprimiria o ActiveDocument. O ActiveDocument é o documento no Word que “tem o foco”
Para alternar o ActiveDocument, use o comando Activate:
Documents("Exemplo.docx").Activate
ThisDocument
Em vez de usar ActiveDocument para fazer referência ao documento ativo, você pode usar ThisDocument para fazer referência ao documento em que a macro está armazenada. ThisDocument nunca será alterado.
ThisDocument.PrintOut
Variáveis de Documento
Entretanto, para macros mais complicadas, pode ser difícil manter o controle do documento ativo. Também pode ser frustrante alternar entre os documentos.
Em vez disso, você pode usar variáveis de documento.
Essa macro atribuirá o ActiveDocument a uma variável e, em seguida, imprimirá o documento usando a variável:
Sub VarExemplo()
Dim oDoc As Document
Set oDoc = ActiveDocument
oDoc.PrintOut
End Sub
Métodos de documento
Abrir Documento
Para abrir um documento do Word:
Documents.Open "c:\Usuarios\Alguem\NovoDocumento.docx"
Recomendamos sempre atribuir um documento a uma variável ao abri-lo:
Dim oDoc as Document
Set oDoc = Documents.Open("c:\Usuarios\Alguem\NovoDocumento.docx")
Criar novo documento
Para criar um novo documento do Word:
Documents.Add
Podemos instruir o Word a criar um novo documento com base em algum modelo:
Documents.Add Template:="C:\Arquivos de Programas\Microsoft Office\Templates\MeuTemplate.dotx"
Como sempre, é útil e poupa muitos problemas atribuir um documento a uma variável ao criá-lo ou abri-lo:
Dim oDoc as Document
Set oDoc = Documents.Add (Template:="C:\Arquivos de Programas\Microsoft Office\Templates\MeuTemplate.dotx")
Salvar Documento
Para salvar um documento:
ActiveDocument.Save
ou Salvar Como:
ActiveDocument.SaveAs FileName:= "c:\Usuarios\Alguem\ArquivoTeste2.docx", FileFormat:=wdFormatDocument
Fechar Documento
Para fechar um documento e salvar as alterações:
ActiveDocument.Close wdSaveChanges
ou sem salvar as alterações:
ActiveDocument.Close wdDoNotSaveChanges
Imprimir Documento
Isso imprimirá o documento ativo:
ActiveDocument.PrintOut
Intervalo, Seleção, Parágrafos
Range e Selection são provavelmente os objetos mais importantes no Word VBA, certamente os mais usados.
Range refere-se a alguma parte do documento, geralmente, mas não necessariamente, texto.
Selection refere-se ao texto selecionado (ou outro objeto, como imagens) ou, se nada estiver selecionado, a um ponto de inserção.
Paragraphs representam parágrafos no documento. É menos importante do que parece, pois não é possível acessar diretamente o texto do parágrafo (é necessário acessar um intervalo de parágrafos específico para fazer modificações).
Range
O intervalo pode ser qualquer parte do documento, inclusive o documento inteiro:
Dim oRange As Range
Set oRange = ActiveDocument.Content
ou pode ser pequeno como um caractere.
Em outro exemplo, esse intervalo se referiria à primeira palavra do documento:
Dim oRange As Range
Set oRange = ActiveDocument.Range.Words(1)
Normalmente, você deseja obter um intervalo que se refira a uma parte específica do documento e depois modificá-lo.
No exemplo a seguir, tornaremos a primeira palavra do segundo parágrafo em negrito:
Dim oRange As Range
Set oRange = ActiveDocument.Paragraphs(2).Range.Words(1)
oRange.Bold = True
Definir Texto do Intervalo
Para definir o valor do texto de um intervalo:
Dim oRange As Range
Set oRange = ActiveDocument.Paragraphs(2).Range.Words(1)
oRange.Text = "Olá "
(Dica: observe o espaço após “Olá”. Como o objeto word inclui o espaço após a palavra, com apenas “Olá”, obteríamos “Oláproxima palavra”)
Há centenas de coisas que você pode fazer com intervalos. Apenas alguns exemplos (que pressupõem que você já tenha criado a variável de objeto oRange referente ao intervalo de interesse):
Alterar Fonte
oRange.Font.Name = "Arial"
Exibir na Caixa de Mensagem o Número de Caracteres em um Determinado Intervalo
MsgBox oRange.Characters.Count
Inserir Algum Texto Antes Dele
oRange.InsertBefore "esse é um texto inserido "
Adicionar uma nota de rodapé ao intervalo
ActiveDocument.Footnotes.Add Range:=oRange, _
Text:="Leia mais em automateexcel.com."
Copiar para a Área de Transferência
oRange.Copy
'Muitas vezes, você precisa mudar para o que o intervalo específico está se referindo.
'Assim, você pode atribuir seu início e fim
oRange.Start = 5
oRange.End = 50
Após o código acima, oRange se referiria ao texto que começa com o quinto e termina com o 50º caractere no documento.
Selection
Selection (seleção) é ainda mais usada do que o Range (intervalo), porque é mais fácil trabalhar com seleções do que com intervalos, SE a macro interagir SOMENTE com o ActiveDocument.
Primeiro, selecione a parte desejada de seu documento. Por exemplo, selecione o segundo parágrafo no documento ativo:
ActiveDocument.Paragraphs(2).Range.Select
Em seguida, você pode usar o Selection Object para digitar algum texto:
Selection.TypeText "Algum texto"
Podemos digitar alguns parágrafos abaixo de “Algum texto”:
Selection.TypeText "Algum texto"
Selection.TypeParagraph
Muitas vezes, é necessário saber se algum texto está selecionado ou se temos apenas um ponto de inserção:
If Selection.Type <> wdSelectionIP Then
Selection.Font.Bold = True
Else
MsgBox "Você precisa selecionar algum texto."
End If
Ao trabalhar com o objeto Selection, queremos colocar o ponto de inserção em um local específico e emitir comandos a partir desse ponto.
Início do Documento:
Selection.HomeKey Unit:=wdStory, Extend:=wdMove
Início da linha atual:
Selection.HomeKey Unit:=wdLine, Extend:=wdMove
O parâmetro Extend wdMove move o ponto de inserção. Em vez disso, você pode usar o wdExtend, que selecionará todo o texto entre o ponto de inserção atual.
Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
Mover Seleção
O método mais útil para alterar a posição do ponto de inserção é o Move. Para mover a seleção dois caracteres para frente:
Selection.Move Unit:=wdCharacter, Count:=2
para movê-la para trás, use um número negativo para o parâmetro Count:
Selection.Move Unit:=wdCharacter, Count:=-2
O parâmetro Unit pode ser wdCharacter, wdWord, wdLine ou outros (use a ajuda do Word VBA para ver outros).
Para mover palavras, em vez disso:
Selection.Move unit:=wdWord, Count:=2
É mais fácil trabalhar com a seleção (em comparação com os intervalos) porque ela é como um robô usando o Word, imitando o usuário humano. Onde estiver o ponto de inserção, alguma ação ocorrerá. Porém, isso significa que você deve tomar cuidado com o local do ponto de inserção! Isso não é fácil depois de muitas etapas no código. Caso contrário, o Word alteraria o texto em um local não desejado.
Caso você precise de alguma propriedade ou método não disponível no objeto Selection, sempre poderá obter facilmente o intervalo associado à seleção:
Set oRange = Selection.Range
DICA: Usar Selection é geralmente mais fácil do que usar intervalos, mas também é muito mais lento (importante quando você lida com documentos grandes)
Parágrafos
Não é possível usar diretamente o objeto Paragraphs para alterar o texto:
ActiveDocument.Paragraphs(1).Text = "Não, isso não funcionaria"
O procedimento acima não funcionaria (na verdade, ele geraria um erro). Você precisa primeiro obter o intervalo associado a um parágrafo específico:
ActiveDocument.Paragraphs(1).Range.Text = "Agora funciona :)"
Mas você pode alterar diretamente seu estilo:
ActiveDocument.Paragraphs(1).Style = "Normal"
ou alterar sua formatação em nível de parágrafo:
ActiveDocument.Paragraphs(1).LeftIndent = 10
ou talvez você queira manter esse parágrafo na mesma linha do próximo parágrafo:
ActiveDocument.Paragraphs(1).KeepWithNext = True
Tornar o parágrafo centralizado:
ActiveDocument.Paragraphs(1).Alignment = wdAlignParagraphCenter
É MUITO útil atribuir um parágrafo específico a uma variável de objeto. Se atribuirmos um parágrafo específico a uma variável, não precisaremos nos preocupar se o primeiro parágrafo se tornar o segundo porque inserimos um parágrafo antes dele:
dim oPara as Paragraph
Set oPara = Selection.Paragraphs(1) 'Aqui atribuímos o primeiro parágrafo da seleção atual à variável
Aqui está um exemplo em que inserimos um parágrafo acima do primeiro parágrafo, mas ainda podemos fazer referência ao primeiro parágrafo antigo porque ele foi atribuído a uma variável:
Sub ExemploParagrafo()
Dim oPara As Paragraph
Set oPara = ActiveDocument.Paragraphs(1)
MsgBox oPara.Range.Text
oPara.Range.InsertParagraphBefore 'Insert Paragraph
MsgBox oPara.Range.Text
End Sub
O objeto Paragraph é usado com muita frequência em loops:
Sub LoopAtravesDeParagrafos()
Dim oPara As Paragraph
For Each oPara In ActiveDocument.Paragraphs
'fazer algo com ele. Apenas exibiremos o texto
'do parágrafo se seu estilo for "Título 4"
If oPara.Style = "Título 4" Then
MsgBox oPara.Range.Text
End If
Next oPara
End Sub
Conclusão do Tutorial do Word VBA
Este tutorial abordou os conceitos básicos do Word VBA. Se você não tem experiência com o VBA, consulte também nosso tutorial geral de VBA para saber mais sobre variáveis, loops, MessageBoxes, configurações, lógica condicional e muito mais.
Exemplos de macro do Word
Word Macro Examples |
---|
SaveAs PDF |
Find and Find and Replace |
Open Documents |
Perguntas Frequentes Sobre o Word VBA
O que é uma macro do Word?
Macro é um termo geral que se refere a um conjunto de instruções de programação que automatiza tarefas. As macros do Word automatizam tarefas no Word usando a linguagem de programação VBA.
O Word tem VBA?
Sim, o Microsoft Word tem o Editor VBA. Ele pode ser acessado pressionando ALT + F11 ou navegando até Desenvolvedor > Visual Basic.
Como posso usar o VBA no Word?
1. Abra o Editor VBA (ALT + F11 ou Desenvolvedor > Visual Basic)
2. Vá para Inserir > Módulo para criar um Módulo de Código
3. Digite “Sub OlaMundo” e pressione Enter
4. Entre as linhas “Sub OlaMundo” e “End Sub”, digite ” MsgBox “Olá Mundo!” ”
5. Você criou uma macro!
6. Agora pressione “F5” para executar a macro