PowerPoint VBA – Exemplos e Tutoriais de Macros
In this Article
- PDF sobre VBA (downloads gratuitos)
- Tutorial de VBA (Macros) do PowerPoint
- Salvar Como Apresentação Habilitada para Macro
- Ativar a guia “Desenvolvedor” na faixa de opções
- Criar Macro do PowerPoint
- Aplicativo do PowerPoint
- Criar uma Nova Apresentação
- Abrir uma Nova Apresentação
- Abrir uma Apresentação Existente
- Abrir e Atribuir a Uma Variável
- Fazer Referência à Apresentação Ativa
- Salvar a Apresentação Atual
- Fechar a Apresentação Atual
- Referências úteis
- Atribuir uma Apresentação Existente (por Nome) a uma Variável
- Atribuir Slide Ativo à Variável
- Atribuir Slide por Índice à Variável
- Contar Número de Slides
- Obter o Número do Índice de Slides do Slide Atual
- Adicionar um Slide em Branco ao Final da Apresentação de Slides
- Adicionar um Slide Antes do Slide Atual
- Excluir um Slide
- Ir Para um Slide Específico
- Mover Slide
- Percorrer Todos os Slides
- Percorrer Todas as Formas do Slide Ativo
- Percorrer Todas as Formas em Todos os Slides
- Percorrer Todas as Caixas de Texto do Slide Ativo
- Percorrer Todas as TextBoxes em Todos os Slides
- Copiar Slides Selecionados Para uma Nova Apresentação PPT
- Copiar o Slide Ativo para o Final da Apresentação Ativa
- Exemplos Úteis de Macro do PowerPoint
- Alterar Slide Durante a Apresentação de Slides
- Alterar Fonte em Todos os Slides em Todas as Caixas de Texto
- Alterar de Todas em Maiúsculas para Normal em Todas as Caixas de Texto
- Alternar Entre Maiúsculas e Normal em Todas as Caixas de Texto
- Remover o Sublinhado dos Descendentes
- Remover Animações de Todos os Slides
- Salvar a Apresentação Como PDF
- Localizar e Substituir Texto
- Exportar Slide Como Imagem
- Redimensionar a Imagem para Cobrir o Slide Inteiro
- Sair de Todas as Apresentações de Slides em Execução
- Automatizando o PowerPoint a Partir do Excel
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!
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)
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.
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