[VBA] – Criando Apresentações no Power Point usando o Excel – Parte I

Tempo de leitura: menos de 1 minuto

Fala Pessoal,

Depois de alguns meses estou de volta. 🙂

Essa semana inicie meus estudos voltados para integração do Office através VBA e quero compartilhar com vocês. Já tinha postado em tópico anterior como mandar e-mail usando o Microsoft Outlook no Excel ( http://excelsemlimites.wordpress.com/2012/03/21/vba-enviar-email-do-outlook-usando-o-excel) e hoje quero mostrar como criar uma apresentação em Power Point de forma automática usando tabelas e gráficos do Excel. Estou chamando esse post de Parte I, pois ainda estou estudando sobre esse recurso e em breve trarei mais novidades.

Gráficos e tabelas que estão em apresentações em Power Point geralmente são elaborados no Excel, portanto, sempre temos aquele trabalho de copiar e colar para o Power Point. Sendo que se você tem uma apresentação padrão que toda semana ou mês você tem que elaborar, de modo que é necessária apenas atualização dos dados, podemos concluir que seria muito mais PRODUTIVO criar uma única vez e o Excel montará os slides toda vez que você necessitar gerar uma nova apresentação.Bom, chega de enrolação e vamos paro código.

Primeiro é necessário importar a Library: Microsoft PowerPoint 14.0 Object Library dentro dessa biblioteca estarão todos os métodos e objetos necessários para essa integração com o Power Point. Se você não lembra como deve importar segue uma pequena ajuda. Menu Ferramentas > Referência do seu Microsoft Visual Basic, basta então procurar na caixinha e marcar a referência que você quer.

Passo a Passo.

Vamos criar uma rotina chamada:

[sourcecode highlight=”” language=”vb”]
Sub gerarApresentacao()

End Sub
[/sourcecode]

É necessário criarmos as variáveis abaixo

[sourcecode highlight=”” language=”vb”]

Dim pptApp As PowerPoint.Application
Dim pptPres As PowerPoint.Presentation
Dim pptSld As PowerPoint.Slide
Dim strImage As String
[/sourcecode]

A primeira pptApp é para abrir a Aplicação no caso o PowerPoint, a segunda pptPre serve para criarmos uma Apresentação Nova, a terceira pptSld para os slides e por fim a variável strImage que irá guardar o intervalo do Excel que será exportado para o Power Point.

O comando abaixo é para criar um objeto do tipo Power Point.

[sourcecode highlight=”” language=”vb”]
Set pptApp = CreateObject("PowerPoint.Application")
[/sourcecode]

Esse serve apenas para tornar o objeto( o Arquivo Power Point Criado) visível durante a execução da rotina.

[sourcecode highlight=”” language=”vb”]
pptApp.Visible = msoTrue
[/sourcecode]

Nos comandos abaixo criamos uma nova apresentação e ativamos na Aplicação que geramos anteriormente. Em outras palavras, primeiro iniciamos o Power Point e depois fomos em Arquivo – Novo- Apresentação em Branco.

[sourcecode highlight=”” language=”vb”]
Set pptPres = pptApp.Presentations.Add

Set pptPres = pptApp.ActivePresentation

Set pptSld = pptPres.Slides.Add(1, ppLayoutBlank)
[/sourcecode]

  • ppLayoutBlank =  Laytout vazio;
  • ppLayoutChart = Layout com gráfico;
  • ppLayoutComparison = Layout de comparação ;

Para você ver todos os Layout, basta na hora que você estiver digitando o comando Set pptSld = pptPres.Slides.Add(1, ppLayoutBlank), depois da virgula após o  numero 1 irão aparecer todas as opções.

A linha abaixo estará direcionando um intervalo na sua planilha que consta a tabela que será importada pro Power Point e o segunda é para gerar uma imagem dela.

[sourcecode highlight=”” language=”vb”]
strImage = Range("A1:B5").Select

Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture
[/sourcecode]

Os dois comandos abaixo estarão inserindo a imagem no slide.

[sourcecode highlight=”” language=”vb”]
pptApp.ActiveWindow.View.GotoSlide pptSld.SlideIndex

pptSld.Shapes.Paste.Select
[/sourcecode]

E por fim os dois últimos comandos são para alinhar a imagem no slide.

[sourcecode highlight=”” language=”vb”]
pptApp.ActiveWindow.Selection.ShapeRange.Top = pptApp.ActiveWindow.Selection.ShapeRange(1).Top + 110

pptApp.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
[/sourcecode]

Essa é a primeira parte, nos próximos iremos aprender a organizar melhor nosso slide, criar titulo, colar gráficos, criar slides com padrões específicos, formatar nossa apresentação, efeitos, ou seja, deixar nosso slide com cara de apresentação profissional e tudo gerado automaticamente pelo VBA no Excel.

Espero que tenha gostando.

Segue o Código Completo:

[sourcecode highlight=”” language=”vb”]
Sub gerarApresentacao()

Dim pptApp As PowerPoint.Application
Dim pptPres As PowerPoint.Presentation
Dim pptSld As PowerPoint.Slide
Dim strImage As String

Set pptApp = CreateObject("PowerPoint.Application")
pptApp.Visible = msoTrue

Set pptPres = pptApp.Presentations.Add
Set pptPres = pptApp.ActivePresentation

strImage = Range("A1:B5").Select

Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture
pptApp.ActiveWindow.View.GotoSlide pptSld.SlideIndex

pptSld.Shapes.Paste.Select
pptApp.ActiveWindow.Selection.ShapeRange.Top = pptApp.ActiveWindow.Selection.ShapeRange(1).Top + 110

pptApp.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True

End Sub
[/sourcecode]

Baixe o Exemplo Aqui

 Abraços

Elquisson Lima

16 Comentários


  1. Olá amigo! Achei sensacional o seu post… muito obrigado por compartilhar! Bom saber que consigo fazer isso com vba, estou com uma situação no trabalho no qual preciso gerar slideS a partir do excel… pensei em usar copiar e colar com vinculo, porém essa solução é muito limitada, pois a minha lista varia de tamanho então acabo tendo varios slides com pouco conteudo… da forma que vc fez eu conseguiria ter mais fexibilidade… vc já chegou a trabalhar com varios slides? Gostaria de trocar um papo contigo sobre isso, é possivel? Muito obrigado! um abs!

    Responder

  2. Elquisson, seu exemplo é muito bom e já indica um caminho para automatizar a formação de apresentações via vba excell. Contudo, tenho um pequeno problema, que não estou conseguindo resolver. Desejo colar uma tabela do excell para o power point, mas não como imagem, e sim como OLEObject. Já sei como fazer isso, mas não consigo formatar a posição e o tamanho, como você fez após colar uma imagem. Segue meu pequeno código:

    Sub APT

    Dim pptApp As PowerPoint.Application
    Dim pptPres As PowerPoint.Presentation
    Dim pptSld As PowerPoint.Slide

    Set pptApp = CreateObject(“PowerPoint.Application”)

    pptApp.Visible = msoTrue

    Set pptPres = pptApp.presentations.Open(“D:MACROSAPT.pptm”)

    Set pptPres = pptApp.ActivePresentation

    Set pptSld = pptPres.Slides(2)

    Worksheets(“Plan1”).Activate

    range(“a1:b2”).Copy

    pptPres.Slides(2).Shapes.PasteSpecial DataType:=ppPasteOLEObject

    End Sub

    pptApp.presentations(1).Save
    pptApp.Quit

    Você saberia me ajudar?

    Abraços

    Beatriz

    Responder

    1. Beatriz.

      Eu testei aqui na minha maquina e as linhas abaixo ( que estão como exemplo no post) funcionaram normalmente alinhando a tabela e não mas a imagem. Você precisa agora brincar com o numeros para colocar na posição e no tamanho que você quer.

      Espero te ajudado, qq coisa manda no meu email elkysson@gmail.com.

      Abraços!

      pptApp.ActiveWindow.Selection.ShapeRange.Top = pptApp.ActiveWindow.Selection.ShapeRange(1).Top + 110
      pptApp.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True

      Responder

      1. Ainda não funcina.. ele dá o seguinte erro: “Selection (unknown member): Invalid Request. Nothig appropriate is currently selected.”

        A única coisa que eu fiz foi colocar as duas linhas (pptApp.ActiveWindow.Selection.ShapeRange.Top = pptApp.ActiveWindow.Selection.ShapeRange(1).Top + 110
        pptApp.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True) após o meu código que postei no comentário anterior.

        Você tem alguma ideia do motivo??

        Abraços e obrigada pela ajuda

        Responder

        1. Esta ocorrendo isso por seu codigo esta sem o comando de Add slide.

          Set pptSld = pptPres.Slides.Add(qtd, ppLayoutBlank)

          Segue o codigo completo para vc tentar rodar, se por ventura você não consegui manda o email com sua planilha que vejo para vc:

          Sub APT()

          Dim pptApp As PowerPoint.Application
          Dim pptPres As PowerPoint.Presentation
          Dim pptSld As PowerPoint.Slide
          Dim qtd As Long

          qtd = 1

          Set pptApp = CreateObject(“PowerPoint.Application”)

          pptApp.Visible = msoTrue

          Set pptPres = pptApp.Presentations.Add
          Set pptPres = pptApp.ActivePresentation
          Set pptSld = pptPres.Slides.Add(qtd, ppLayoutBlank)

          pptApp.ActiveWindow.ViewType = ppViewSlide

          Worksheets(“Plan1”).Activate

          Range(“a1:b2”).Copy

          pptPres.Slides(qtd).Shapes.PasteSpecial DataType:=ppPasteOLEObject

          pptApp.ActiveWindow.Selection.ShapeRange.Top = pptApp.ActiveWindow.Selection.ShapeRange(qtd).Top + 110
          pptApp.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True

          End Sub

          Responder

  3. Ola, eu adorei o post! vou usar com certeza… mas estou com alguns problemas e gostaria de ver se vc pode me ajudar,
    Eu copie o código e soh mudei a seleção das celulas, e esta funcionando, mas eu queria saber se dá para fazer isso em um arquivo de powerpoint com um layout ja pronto. Eu ja tenho um layout que todos os meses são utilizados, e eu queria só acrescentar as tabelas atualizadas todos os meses. Então preciso determinar para copiar cada seleção e colocar cada um em um slide. Dá para fazer isso?
    Obrigada

    Responder

  4. Olá,

    Tentei fazer da mesma maneira, porém, estou tendo um erro chamado:

    Run-time error ‘424’:

    Object required

    Quando clico no Debug da mensagem, o seguinte código fica em amarelo:

    pptSld.Shapes.Paste.Select

    Como posso solucionar?

    Segue código:

    Sub gerarApresentacao()

    ‘É necessário criar as variáveis abaixo:
    ‘pptApp – serve para abrir a aplicação, neste caso o PowerPoint
    ‘pptPre – serve para criar uma apresentação nova
    ‘pptSld – serve para criar os slides
    ‘strImage – serve para guardar o intervalo do Excel que será exportado para o PowerPoint

    Dim pptApp As PowerPoint.Application
    Dim pptPres As PowerPoint.Presentation
    Dim pptSld As PowerPoint.Slide
    Dim strImage As String

    ‘Os comandos abaixo, servem para:
    ‘-Criar um objeto do tipo PowerPoint
    ‘-Serve para tornar o objeto (o arquivo Power Point criado) visível durante a execução da rotina

    Set pptApp = CreateObject(“PowerPoint.Application”)

    pptApp.Visible = msoTrue

    ‘Os comandos abaixo servem para criar uma nova apresentação e ativar a aplicação que foi gerada anteriormente.
    ‘Neste caso, primeiro iniciamos o PowerPoint e depois fomos em Arquivo – Novo – Apresentação em Branco.

    Set pptPres = pptApp.Presentations.Add
    Set pptPres = pptApp.ActivePresentation
    Set pptSld = pptPres.Slides.Add(1, ppLayoutBlank)

    ‘No comando acima, pptSld, existe a possibilidade de substituir o ppLayoutBlank, para:
    ‘ppLayoutBlank = Layout vazio;
    ‘ppLayoutChart = Layout com gráfico;
    ‘ppLayoutComparison = Layout de comparação;

    ‘A linha abaixo estará direcionando um intervalo na sua planilha que consta a tabela que será importada pro
    ‘Power Point e o segunda é para gerar uma imagem dela.

    strImage = Worksheets(“COLAR_PPT”).Range(“B3:L11”).Select
    Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture

    pptApp.ActiveWindow.View.GotoSlide pptSld.SlideIndex
    pptSld.Shapes.Paste.Select

    ‘Estes últimos comandos são para alinhar a imagem no slide

    pptApp.ActiveWindow.Selection.ShapeRange.Top = pptApp.ActiveWindow.Selection.ShapeRange(1).Top + 110

    pptApp.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True

    End Sub

    Responder

  5. Olá estou tentando criar um vínculo para que dados do meu excel após um click do botão sejam colados no ppt. Já criei o pot, mas não sei consigo setar o envio do dado para o slide ou mesmo definir a quantidade de slides. vc tem como me ajudar?

    Responder

    1. Felippe. Esse script do VBA nesse post tem essa finalidade, tenta utilizar ele que você alcançará seu objetivo. Você já trabalha com VBA ?

      Responder

  6. Ola, Parabéns essa rotina é fantástica!
    Copie o código e esta funcionando perfeitamente, mas eu queria saber se dá para colocar os intervalos que determinei, cada um em um slide diferente do power point.
    Sei que é possível, mas não sei como proceder?
    Grato,

    Responder

  7. Olá.
    Excelente seu post!

    Eu estou com um probleminha: aparece o seguinte erro
    “Erro de Compilação:
    Método ou membro de dados não encontrado”

    Poderia me ajudar?

    Fiz a importação da Library: Microsoft PowerPoint 15.0 Object Library

    Abaixo está o código que utilizei.

    Sub gerarApresentacao()

    Dim pptApp As PowerPoint.Application
    Dim pptPres As PowerPoint.Presentation
    Dim pptSld As PowerPoint.Slide
    Dim strImage As String

    Set pptApp = CreateObject(“PowerPoint.Aplication”)
    pptAppVisible = msoTrue

    Set pptPres = pptApp.Presentation.Add
    Set pptPres = pptApp.ActivePresentation
    Set pptSld = pptPres.Slides.Add(1, ppLayoutBlank)

    strImage = Range(“A1:B5”).Select

    Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture
    pptApp.ActiveWindow.View.GotoSlide pptSld.SlideIndex

    pptSld.Shapes.Paste.Select

    pptApp.ActiveWindow.Selection.ShapeRange.Top = pptApp.ActiveWindow.Selection.ShapeRange(1).Top + 110

    pptApp.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True

    End Sub

    Responder

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *