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]
Abraços
Elquisson Lima
Link permanente
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!
Link permanente
Fala cara. É possivel sim trabalhar com varios slides. JA fiz isso, manda um email pra mim com a duvida. Abracos. elkysson@gmail.com
Link permanente
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
Link permanente
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
Link permanente
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
Link permanente
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
Link permanente
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
Link permanente
É possivel sim, me mande o email que te ajudo. elkysson@gmail.com
Link permanente
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
Link permanente
Fernando. Você importou a Library: a Microsoft PowerPoint 14.0 Object Library ?
Link permanente
Olá,
Sim. Ativei algumas Library.
Link permanente
Me manda a sua planilha que olho com mais profundidade.
Link permanente
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?
Link permanente
Felippe. Esse script do VBA nesse post tem essa finalidade, tenta utilizar ele que você alcançará seu objetivo. Você já trabalha com VBA ?
Link permanente
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,
Link permanente
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