Exemplos de macros do Word e tutorial VBA

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Daniel Caramello

Last updated on July 14, 2023

Bem-vindo ao nosso Mega-Guia de Macros / VBA do Word!

Esta página contém:

    1. PDF do tutorial do Word VBA (download gratuito)
    2. “Folha de Dicas” do Word VBA contendo uma lista dos trechos de código do Word VBA mais comumente usados
    3. Tutorial completo de Word VBA / Macro.
    4. 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!

word vba tutorial pdf

Baixar


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

Descrição
Código VBA
Backspace
Selection.TypeBackspace
Selecionar todo o documento
Selection.HomeKey Unit:=wdStory
Selection.Extend
Copiar
Selection.Copy
Excluir
Selection.Delete Unit:=wdCharacter, Count:=1
Inserir após
Selection.InsertAfter “texto”
Início da linha
Selection.HomeKey Unit:=wdLine
Fim da linha
Selection.EndKey Unit:=wdLine
Colar
Selection.Paste
Selecionar tudo
Selection.WholeStory
Selecionar toda a linha
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Mover parágrafo para cima
Selection.MoveUp Unit:=wdParagraph, Count:=1
Mover um caractere para a direita
Selection.MoveRight Unit:=wdCharacter, Count:=1
Mover uma célula da tabela para a direita
Selection.MoveRight Unit:=wdCell
Ir para o início do documento
Selection.HomeKey Unit:=wdStory
Ir para o final do documento
Selection.EndKey Unit:=wdStory
Ir para a página 1
Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Name:=”1″
Ir para o topo da página
Selection.GoTo What:=wdGoToBookmark, Name:=”\Page”
Selection.MoveLeft Unit:=wdCharacter, Count:=1

Retornar ao topo

Marcadores

Descrição do código
Código VBA
Adicionar
With ActiveDocument.Bookmarks
.Add Range:=Selection.Range, Name:=”Name”
.DefaultSorting = wdSortByName
showHidden = False
End With
Count
Dim n as Integer
n = ActiveDocument.Bookmarks.Count
Excluir
ActiveDocument.Bookmarks(“BookmarkName”).Delete
Existe?
If ActiveDocument.Bookmarks.Exists(“BookmarkName”) = True then
‘Fazer algo
End If
Ir para
Selection.GoTo What:=wdGoToBookmark, Name:=”BookmarkName”
Selecionar
ActiveDocument.Bookmarks(“BookmarkName”).Select
Substituir texto
Selection.GoTo What:=wdGoToBookmark, Name:=”BookmarkName”
Selection.Delete Unit:=wdCharacter, Count:=1
Selection.InsertAfter“Novo texto”
ActiveDocument.Bookmarks.Add Range:=Selection.Range, _
Name:=”BookmarkName”

Retornar ao topo

Documentos

Descrição do documento
Código VBA
Ativar
Documents(“Exemplo.doc”).Activate
Adicionar à variável
Dim doc As Document
Set doc = Documents.Add
Adicionar
Documents.Add
Adicionar (de outro documento)
Documents.Add Template:=”C:\Forms\FormDoc.doc”, _
NewTemplate:=False
Fechar
Documents(“Exemplo.doc”).Close
Fechar – Salvar alterações
Documents(“Exemplo.doc”).Close SaveChanges:=wdSaveChanges
Fechar – Não salvar
Documents(“Exemplo.doc”).Close SaveChanges:=wdDoNotSaveChanges
Fechar – Solicitar para salvar
Documents(“Exemplo.doc”).Close SaveChanges:=wdPromptToSaveChanges

Voltar ao topo

Colunas

Descrição
Código VBA
Salvar como
Documents(“Exemplo.doc”).SaveAs (“C:\Exemplo\Exemplo.doc”)
Salvar
Documents(“Exemplo.doc”).Save
Proteger
Documents(“Exemplo.doc”).Protect Password:=”senha”
Desproteger
Documents(“Exemplo.doc”).UnProtect Senha:=”senha”
Número de páginas
Dim varNumberPages as Variant
varNumberPages = _
ActiveDocument.Content.Information(wdActiveEndAdjustedPageNumber)
Imprimir
Documents(“Exemplo.doc”).Print

Retornar ao topo

Fontes

Descrição
Código VBA
Tamanho da fonte
Selection.Font.Size = 12
Negrito
Selection.Font.Bold = True
Itálico
Selection.Font.Italic = True
Sublinhado
Selection.Font.Underline = wdUnderlineSingle
Todas as letras maiúsculas
Selection.Font.AllCaps = True
Cor
Selection.Font.TextColor = vbRed
Nome da fonte
Selection.Font.Name = “Abadi”
Subscrito
Selection.Font.Subscript = True
SuperScript
Selection.Font.Superscript = True
Cor de destaque
Selection.Range.HighlightColorIndex = wdYellow
Estilo
Selection.Style = ActiveDocument.Styles(“Normal”)

Voltar ao topo

Inserir

Descrição
Código VBA
Inserir AutoTexto
Selection.TypeText Text:=”a3″
Selection.Range.InsertAutoText
Inserir código de data
Inserir arquivo
Selection.InsertFile (“C:\Docs\AlgumaCoisa.doc”)
Inserir quebra de página
Selection.InsertBreak Type:=wdPageBreak
Inserir símbolo de parágrafo
Selection.TypeText Text:=Chr$(182)
Inserir tabulação
Selection.TypeText Text:=vbTab
Inserir texto
Selection.TypeText Text:=”Qualquer texto”
Inserir tipo de parágrafo
Selection.TypeParagraph
Inserir parágrafo
Selection.InsertParagraph

Voltar ao topo

Loops

Descrição
Código VBA
Fazer até o fim do documento
Do Until ActiveDocument.Bookmarks(“\Sel”) = ActiveDocument.Bookmarks(“\EndOfDoc”)
‘Fazer algo
Sub
Para cada Doc em Docs
Dim doc As Document
ForEachdoc In Documents
‘Faça algo
Next doc
Percorrer os parágrafos
Sub through Paragraphs
Dim i As Long, iParCount As Long
iParCount = ActiveDocument.Paragraphs.CountFori= 1 To iParCount
ActiveDocument.Paragraphs(i).Alignment = wdAlignParagraphLeft
Next i

Retornar ao topo

Parágrafo

Descrição
Código VBA
Manter Linhas Juntas
Selection.ParagraphFormat.KeepTogether = True
Manter com Próxima
Selection.ParagraphFormat.KeepWithNext = True
Espaço após
Selection.ParagraphFormat.SpaceAfter = 12
Espaço antes
Selection.ParagraphFormat.SpaceBefore = 0
Alinhar ao centro
Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
Alinhar à direita
Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
Alinhar à esquerda
Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
Indentação à esquerda
Selection.ParagraphFormat.LeftIndent = InchesToPoints(3.75)
Recuo à direita
Selection.ParagraphFormat.RightIndent = InchesToPoints(1)
Espaçamento entre linhas
With Selection.ParagraphFormat
.LineSpacingRule = wdLineSpaceExactly
.LineSpacing = 12
End With
Fazer um loop por todos os parágrafos
Sub through Paragraphs
Dim i As Long, iParCount As Long
iParCount = ActiveDocument.Paragraphs.CountFori= 1 To iParCount
ActiveDocument.Paragraphs(i).Alignment = wdAlignParagraphLeft
Next i

Retornar ao topo

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.

word exibir macros

Depois de gravar uma Macro, você poderá editá-la na Lista de Macros:

word-lista-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.

word editor vba

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.

exemplo macro word vbe

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

vba-free-addin

Exemplos de Add-ins de Códigos VBA

Acesse facilmente todos os exemplos de código que se encontram em nosso site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(Nenhuma instalação necessária!)

Baixe de Graça

Retornar aos Exemplos de Códigos VBA