PowerPoint VBA – Exemplos e Tutoriais de Macros

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Daniel Caramello

Last updated on June 28, 2023

In this Article

Este é um guia completo para automatizar o PowerPoint usando macros VBA (Visual Basic for Applications). Abaixo você encontrará muitos exemplos úteis.


PDF sobre VBA (downloads gratuitos)

Faça o download gratuito do nosso tutorial de VBA do Microsoft PowerPoint! Ou tutoriais de VBA para outros programas do Office!

vba powerpoint tutorial pdf

Baixar


Tutorial de VBA (Macros) do PowerPoint

Salvar Como Apresentação Habilitada para Macro

A apresentação com código VBA deve ser “salva como” apresentação do PowerPoint habilitada para macro (*.pptm)

salvar como pptm

 

Ativar a guia “Desenvolvedor” na faixa de opções

Você deve ativar a guia Desenvolvedor na Faixa de Opções antes de criar o código VBA. Para fazer isso, escolha Arquivo -> Opções, clique em “Personalizar Faixa de Opções” e marque a caixa ao lado da guia “Desenvolvedor” no painel direito.

ativar desenvolvedor powerpoint

Criar Macro do PowerPoint

Este é um exemplo simples de uma macro VBA do PowerPoint:

Sub SalvarApresentacaoComoPDF()
    Dim pptNome As String
    Dim PDFNome As String
    
    ' Salvar PowerPoint como PDF
    pptNome = ActivePresentation.FullName
    ' Substitua a extensão do arquivo PowerPoint no nome para PDF
    PDFNome = Left(pptNome, InStr(pptNome, ".")) & "pdf"
    ActivePresentation.ExportAsFixedFormat PDFNome, 2  ' ppFixedFormatTypePDF = 2
 
End Sub

Ela salva a apresentação ativa como um PDF. Cada linha de código faz o seguinte:

  • Cria variáveis para o nome do PowerPoint e o nome do PDF
  • Atribui o nome da apresentação ativa à variável pptName
  • Cria o nome completo do PDF
  • Salva a apresentação como um PDF

Aplicativo do PowerPoint

Quando o código VBA está sendo executado em uma apresentação do PowerPoint, o aplicativo do PowerPoint é o aplicativo padrão e pode ser manipulado sem referência explícita.

Criar uma Nova Apresentação

Para criar uma apresentação, use o método Add do aplicativo PowerPoint.

Application.Presentations.Add
' ou sem referência explícita
Presentations.Add

Abrir uma Nova Apresentação

Para abrir uma apresentação nova e em branco, use o método Add da coleção Application.Presentations

Presentations.Add

Abrir uma Apresentação Existente

Para abrir uma apresentação que você já tenha criado, use o método Open da coleção Application.Presentations

Presentations.Open ("Minha Apresentacao.pptx")

O código acima pressupõe que a apresentação esteja no mesmo diretório que a apresentação do PowerPoint que contém o código.

Abrir e Atribuir a Uma Variável

Você deve atribuir a apresentação aberta a uma variável para que possa manipulá-la de acordo com suas necessidades.

Dim ppt As Presentation
Set ppt = Presentations.Open("Minha Apresentacao.pptx")

Fazer Referência à Apresentação Ativa

Use a referência ActivePresentation para manipular a apresentação ativa na GUI quando o código VBA for executado.

' Imprimir o nome da ActivePresentation na janela Verificação Imediata
Debug.Print ActivePresentation.Name

Salvar a Apresentação Atual

A instrução abaixo salvará a apresentação ativa se ela já tiver sido salva anteriormente. Se ela não tiver sido salva, será exibida a caixa de diálogo “Salvar como”.

ActivePresentation.Save

Fechar a Apresentação Atual

O comando abaixo fechará a Apresentação Ativa, mesmo que ela não tenha sido salva após a última edição.

ActivePresentation.Close

Referências úteis

Atribuir uma Apresentação Existente (por Nome) a uma Variável

Dim MinhaApresentacaoPorNome As Presentation
Set MinhaApresentacaoPorNome = Application.Presentations("Minha Apresentacao")

Atribuir Slide Ativo à Variável

Dim SlideAtual As Slide
Set SlideAtual = Application.ActiveWindow.View.Slide

Atribuir Slide por Índice à Variável

Dim MeuSlide As Slide
Set MeuSlide = ActivePresentation.Slides(11)

Contar Número de Slides

Dim ContagemSlides As Long
ContagemSlides = ActivePresentation.Slides.Count

Obter o Número do Índice de Slides do Slide Atual

Dim NumeroSlideAtual As Integer
NumeroSlideAtual = Application.ActiveWindow.View.Slide.SlideIndex

Adicionar um Slide em Branco ao Final da Apresentação de Slides

Dim ContagemSlides As Long
Dim NovoSlide as Slide

ContagemSlides = ActivePresentation.Slides.Count
Set NovoSlide = ActivePresentation.Slides.Add(ContagemSlides + 1, 12)
' ou como ppLayoutBlank = 12
Set NovoSlide= ActivePresentation.Slides.Add(ContagemSlides  + 1, ppLayoutBlank)

Adicionar um Slide Antes do Slide Atual

Dim NovoSlide As Slide
Dim IndiceSlideAtual as Integer

IndiceSlideAtual  = Application.ActiveWindow.View.Slide.SlideIndex
Set NovoSlide = ActivePresentation.Slides.Add(IndiceSlideAtual , ppLayoutBlank)

Excluir um Slide

Dim IndiceSlideAtual as Integer

IndiceSlideAtual = Application.ActiveWindow.View.Slide.SlideIndex
ActivePresentation.Slides(IndiceSlideAtual).Delete

Ir Para um Slide Específico

' Isso o levará ao slide número 4
Application.ActiveWindow.View.GotoSlide (4)

Mover Slide

Você pode mover um slide de sua posição antiga para a nova posição

' Mover do slide 3 para o primeiro slide
Dim PosicaoAnterior as integer
Dim PosicaoNova as integer

PosicaoAnterior = 3
PosicaoNova = 1
ActivePresentation.Slides(PosicaoAnterior).MoveTo toPos:=PosicaoNova

Percorrer Todos os Slides

Você pode fazer algo com cada slide ou percorrer todos os slides para encontrar alguns deles e fazer algo a respeito usando o código;

Dim MeuSlide as Slide

For Each MeuSlide In ActivePresentation.Slides
   ' Faça algo com o slide atual mencionado na variável 'MeuSlide'
   Debug.Print MeuSlide.Name
Next MeuSlide

Percorrer Todas as Formas do Slide Ativo

O poder do PowerPoint pode ser percebido com o uso de “Formas” O código abaixo percorre todas as formas do slide atual para que você possa manipulá-las como quiser;

Dim SlideAtual as Slide
Dim shp as Shape

Set SlideAtual = Application.ActiveWindow.View.Slide
For Each shp In SlideAtual.Shapes
  ' Fazer algo com a forma atual mencionada na variável 'shp'
  ' por exemplo, imprimir o nome da forma na janela verificação imediata
  Debug.Print shp.Name
Next shp

Percorrer Todas as Formas em Todos os Slides

Você pode percorrer todas as formas na apresentação adicionando um loop para percorrer todos os slides.

Dim SlideAtual as Slide
Dim shp as Shape

For Each SlideAtual In ActivePresentation.Slides
  For Each shp In SlideAtual.Shapes
    ' Fazer algo com a forma atual mencionada na variável 'shp'
    Debug.Print shp.Name
  Next shp
Next SlideAtual 

Percorrer Todas as Caixas de Texto do Slide Ativo

As caixas de texto são a forma usada com mais frequência nas apresentações do PowerPoint. Você pode percorrer todas as caixas de texto adicionando uma verificação para o “Tipo de Forma” (Shape.Type). As caixas de texto têm o tipo de forma definido como a constante VBA msoTextBox (o valor numérico da constante é 17)

Dim SlideAtual as Slide
Dim shp as Shape

Set SlideAtual = Application.ActiveWindow.View.Slide
For Each shp In SlideAtual.Shapes
  ' Verificar se o tipo de forma é msoTextBox
  If shp.Type = 17 Then ' msoTextBox = 17
    'Imprimir o texto na TextBox
    Debug.Print shp.TextFrame2.TextRange.Text
  End If
Next shp

Percorrer Todas as TextBoxes em Todos os Slides

Novamente, você pode percorrer todas as caixas de texto da apresentação adicionando um loop para percorrer todos os slides.

Dim SlideAtual as Slide
Dim shp as Shape

For Each SlideAtual In ActivePresentation.Slides
  For Each shp In SlideAtual.Shapes
    ' Verificar se o tipo de forma é msoTextBox 
    If shp.Type = 17 Then ' msoTextBox = 17
      ' Faça algo com o TextBox mencionado na variável 'shp'
      Debug.Print shp.TextFrame2.TextRange.Text
    End If
  Next shp
Next SlideAtual

Copiar Slides Selecionados Para uma Nova Apresentação PPT

Para copiar determinados slides em uma nova apresentação, primeiro selecione os slides desejados na apresentação existente e, em seguida, execute o código abaixo;

Dim ApresentacaoAtual as Presentation
Dim SlideAtual as Slide
Dim NovaApresentacao as Presentation

' Salvar referência à apresentação atual
Set ApresentacaoAtual = Application.ActivePresentation

' Salvar referência ao slide atual
Set SlideAtual = Application.ActiveWindow.View.Slide

' Copiar Slides Selecionados
ActiveWindow.Selection.Copy

' Adicionar nova apresentação e definir referência
Set NovaApresentacao = Application.Presentations.Add

' Colar em uma nova apresentação
NovaApresentacao.Slides.Paste

Copiar o Slide Ativo para o Final da Apresentação Ativa

' Copiar o slide atual
Application.ActiveWindow.View.Slide.Copy

' Colar no final
ActivePresentation.Slides.Paste

Exemplos Úteis de Macro do PowerPoint

Aqui estão alguns exemplos úteis de macro que mostram como realizar tarefas. Eles também demonstrarão os conceitos descritos acima.

Alterar Slide Durante a Apresentação de Slides

Sub AlterarSlideDuranteApresentacao()
    Dim IndiceSlide As Integer
    Dim IndiceSlideAnterior As Integer
 
    '  Alterar o slide atual para o slide selecionado 4 durante a apresentação de slides
    IndiceSlide = 4
    ' O índice da janela de apresentação de slides atual é 1 na coleção SlideShowWindows
    IndiceSlideAnterior = SlideShowWindows(1).View.CurrentShowPosition
    SlideShowWindows(1).View.GotoSlide IndiceSlide 
     
End Sub

Alterar Fonte em Todos os Slides em Todas as Caixas de Texto

Sub AlterarFonteTodosSlides()
    Dim MeuSlide As slide
    Dim shp As Shape
    
    ' Alterar o tamanho da fonte em todos os slides
    For Each MeuSlide In ActivePresentation.Slides
      For Each shp In MeuSlide.Shapes
        If shp.Type = 17 Then ' msoTextBox = 17
          ' Change Fontsize to 24
          shp.TextFrame.TextRange.Font.Size = 24
        End If
      Next shp
    Next MeuSlide
 
End Sub

Alterar de Todas em Maiúsculas para Normal em Todas as Caixas de Texto

Sub AlterarMaiusculasParaNormal()
    Dim MeuSlide As slide
    Dim shp As Shape
    
    ' Alterar de todas em maiúsculas para normais em todos os slides
    For Each MeuSlide In ActivePresentation.Slides
      For Each shp In MeuSlide.Shapes
        If shp.Type = 17 Then ' msoTextBox = 17
          ' Alterar maiúsculas para normais
          shp.TextFrame2.TextRange.Font.Allcaps = False
        End If
      Next shp
    Next MeuSlide
 
End Sub

Alternar Entre Maiúsculas e Normal em Todas as Caixas de Texto

Sub AlterarMaiusculasParaNormal()
    Dim MeuSlide As slide
    Dim shp As Shape
 
    '  Alternar entre maiúsculas e normais para todos os slides
    For Each MeuSlide In ActivePresentation.Slides
      For Each shp In MeuSlide.Shapes
        If shp.Type = 17 Then ' msoTextBox = 17
          ' Alternar entre maiúsculas e normais
          shp.TextFrame2.TextRange.Font.Allcaps = _
            Not shp.TextFrame2.TextRange.Font.Allcaps
        End If
      Next shp
    Next MeuSlide 
 
End Sub

Remover o Sublinhado dos Descendentes

Em tipografia, um descendente é a parte de uma letra que se estende abaixo da linha de base de uma fonte. Na maioria das fontes, os descendentes são reservados para caracteres minúsculos, como g, j, q, p, y e, às vezes, f.

Quando você sublinha um texto, ele não fica bonito sob os descendentes. Aqui está o código para remover o sublinhado de todos esses caracteres g, j, p, q e y em toda a apresentação.

Sub RemoverSublinhadoDosDescendentes()
    Dim MeuSlide As slide
    Dim shp As Shape
    Dim Lista_Descendentes As String
    Dim Frase As String
    Dim x As Long
    
    ' Remover sublinhados dos descendentes
    Lista_Descendentes = "gjpqy"
    For Each MeuSlide In ActivePresentation.Slides
      For Each shp In MeuSlide.Shapes
        If shp.Type = 17 Then ' msoTextBox = 17
         ' Remover o sublinhado das letras "gjpqy"
         With shp.TextFrame.TextRange
            Frase = .Text
           For x = 1 To Len(.Text)
             If InStr(Lista_Descendentes, Mid$(Frase, x, 1)) > 0 Then
              .Characters(x, 1).Font.Underline = False
             End If
           Next x
         End With
       End If
      Next shp
    Next MeuSlide
 
End Sub

Remover Animações de Todos os Slides

Use o código abaixo para remover todas as animações definidas em uma apresentação.

Sub RemoverAnimacoesTodosSlides()
    Dim MeuSlide As slide
    Dim i As Long
 
    For Each MeuSlide In ActivePresentation.Slides
      For i = MeuSlide.TimeLine.MainSequence.Count To 1 Step -1
       'Remover cada animação
       MeuSlide.TimeLine.MainSequence.Item(i).Delete
      Next i
    Next MeuSlide
     
End Sub

Salvar a Apresentação Como PDF

Você pode salvar facilmente a apresentação ativa no formato PDF.

Sub SalvarApresentacaoComoPDF()
    Dim pptNome As String
    Dim PDFNome As String
    
    ' Salvar PowerPoint como PDF
    pptNome = ActivePresentation.FullName
    ' Substituir a extensão do arquivo PowerPoint no nome para PDF
    PDFNome = Left(pptNome, InStr(pptNome, ".")) & "pdf"
    ActivePresentation.ExportAsFixedFormat PDFNome, 2  ' ppFixedFormatTypePDF = 2
 
End Sub

Localizar e Substituir Texto

Você pode localizar e substituir texto em todas as caixas de texto de todos os slides. Após a primeira instância do texto que você deseja localizar (definida por findWhat), é necessário percorrer o comando Find para localizar outras instâncias, se houver.

Sub Localizar_e_SubstituirTexto()
    Dim MeuSlide As slide
    Dim shp As Shape
    Dim findWhat As String
    Dim replaceWith As String
    Dim ShpTxt As TextRange
    Dim TmpTxt As TextRange

    findWhat = "jackal"
    replaceWith = "fox"
     
    ' Localizar e Localizar e Substituir
    For Each MeuSlide In ActivePresentation.Slides
      For Each shp In MeuSlide.Shapes
        If shp.Type = 17 Then ' msoTextBox = 17
          Set ShpTxt = shp.TextFrame.TextRange
          'Localizar a primeira instância da palavra "Find" (se houver)
          Set TmpTxt = ShpTxt.Replace(findWhat, _
             Replacewhat:=replaceWith, _
             WholeWords:=True)
     
          'Localizar quaisquer instâncias adicionais da palavra "Find" (se houver)
          Do While Not TmpTxt Is Nothing
            Set ShpTxt = ShpTxt.Characters(TmpTxt.Start + TmpTxt.Length, ShpTxt.Length)
            Set TmpTxt = ShpTxt.Replace(findWhat, _
              Replacewhat:=replaceWith, _
              WholeWords:=True)
          Loop
        End If
      Next shp
    Next MeuSlide
 
End Sub

Exportar Slide Como Imagem

Você pode exportar o slide atual (ou qualquer outro slide) como uma imagem PNG ou JPG (JPEG) ou BMP.

Sub ExportarSlideComoImagem()
    Dim imagemTipo As String
    Dim pptNome As String
    Dim imagemNome As String
    Dim MeuSlide As slide
    
    ' Exportar o slide atual para imagem
    imagemTipo = "png" ' ou jpg ou bmp
    pptNome = ActivePresentation.FullName
    imagemNome = Left(pptNome, InStr(pptNome, ".")) & imagemTipo
    Set MeuSlide = Application.ActiveWindow.View.slide
    MeuSlide.Export imagemNome, imagemTipo
 
End Sub

Redimensionar a Imagem para Cobrir o Slide Inteiro

Sub RedimensionarImagemParaCobrirSlideInteiro()
    Dim MeuSlide As slide
    Dim shp As Shape
    
 
    ' Redimensionar a imagem para o tamanho total do slide
    ' Alterar a altura e a largura da primeira forma no slide atual
    ' para se ajustar às dimensões do slide
    Set MeuSlide = Application.ActiveWindow.View.slide
    Set shp = MeuSlide.Shapes(1)
    ''
    ''Substitua as duas declarações acima pela seguinte 
    ''declaração se quiser expandir a forma selecionada no momento
    ''se nada estiver selecionado, haverá um erro
    'Set shp = ActiveWindow.Selection.ShapeRange(1)
     
    With shp
        .LockAspectRatio = False
        .Height = ActivePresentation.PageSetup.SlideHeight
        .Width = ActivePresentation.PageSetup.SlideWidth
        .Left = 0
        .Top = 0
    End With
 
End Sub

Sair de Todas as Apresentações de Slides em Execução

Se você tiver várias apresentações de slides abertas ao mesmo tempo, poderá fechar todas elas usando a macro abaixo.

Sub SairDeTodasApresentacoesEmExecucao()
 
    Do While SlideShowWindows.Count > 0
        SlideShowWindows(1).View.Exit
    Loop
 
End Sub

Automatizando o PowerPoint a Partir do Excel

Você também pode se conectar ao PowerPoint por meio de outros aplicativos (como Excel e Word). Como primeiro passo, você deve se referir a uma instância do PowerPoint.

Há duas maneiras de fazer isso vinculação antecipada e vinculação tardia .

Abrir o PowerPoint – Vinculação Antecipada

Em Vinculação Antecipada (Early Binding), você deve definir explicitamente uma referência à ‘Microsoft PowerPoint 16 Object Library’ (para MS Office 2019) no VBE (Visual Basic Editor) usando a opção Ferramentas->Referências.

' Vinculação Antecipada
Dim pptApp As Application
Set pptApp = New PowerPoint.Application

Abrir o PowerPoint – Vinculação Tardia

Em Vinculação Tardia (Late Binding), a variável do aplicativo é declarada como um objeto e o mecanismo do VBA se conecta ao aplicativo correto em tempo de execução.

' Vinculação Tardia
Dim pptApp As Object
Set pptApp = CreateObject("PowerPoint.Application")

Tornar o Aplicativo Visível

Depois de definir a referência ao aplicativo PowperPoint, talvez seja necessário torná-lo visível.

pptApp.Visible = True

Manipular o PowerPoint

Você pode usar todos os métodos para manipular apresentações, de dentro do PowerPoint, descritos acima a partir do Excel, bastando adicionar a referência ao PowerPoint criada por você acima.

Por exemplo

Presentations.Open ("Minha Apresentacao.pptx")

deve ser usado assim

pptApp .Presentations.Open ("Minha Apresentacao.pptx")

Fechar o Aplicativo

Depois de concluir o que queria fazer com o aplicativo do PowerPoint, você deve fechá-lo e liberar a referência.

pptApp.Quit
Set pptApp = Nothing

Copiar do Excel para o PowerPoint

Esse código copiará um intervalo do Excel para o PowerPoint:

Nota: Ele foi mantido o mais simples possível para mostrar como um intervalo do Excel pode ser copiado para o PowerPoint usando o VBA.

Sub CopiarIntervaloParaApresentacao()

' Abrir nova instância do PowerPoint
Set pptApp = CreateObject("PowerPoint.Application")

With pptApp
    ' Criar uma nova apresentação
    Set ppt = .Presentations.Add
    ' Adicionar um slide em branco
    Set MeuSlide = ppt.Slides.Add(1, 12) ' ppLayoutBlank = 12
    ' Copiar intervalo da planilha ativa no Excel
    ActiveSheet.Range("A1:E10").Copy
    ' Colar no Powerpoint como uma imagem
    MeuSlide.Shapes.PasteSpecial DataType:=2  '2 = ppPasteEnhancedMetafile
    ' Mudar para o PowerPoint
    .Activate
End With

End Sub

Perguntas Frequentes Sobre o VBA do PowerPoint

O que são macros no PPT?

Macro é um termo geral que se refere a um conjunto de instruções de programação que automatiza tarefas. As macros do PowerPoint (PPT) automatizam tarefas no PowerPoint usando a linguagem de programação VBA.

Como faço para usar o VBA no PowerPoint?

Para usar o VBA no PowerPoint, abra o Editor do VBA (ALT + F11 ou Desenvolvedor > Visual Basic).

Como faço para criar uma macro no PowerPoint?

1. Abra o VBA Editor (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

Escrito por: Vinamra Chandra

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