Como adicionar imagens ao PowerPoint Presentation Picture PlaceHolder?
-
21-12-2019 - |
Pergunta
Eu criei um código no Excel VBA para criar um slide de apresentação do PowerPoint 1 para cada linha do Excel e preencher uma caixa de texto específica no PowerPoint.
Agora quero adicionar todas as imagens que correspondem à descrição.Estes são todos Jpegs e não gráficos, etc.
Como posso fazer isso, e é melhor fazer isso no Excel ou é melhor fazer o próprio Powerpoint VBA?
De qualquer forma, alguém poderia me ajudar com algum código sobre como fazer isso, por favor?
Os quadros de imagem já existem no PowerPoint.Existem 2 imagens por slide (sem transições nem nada).
Obrigado!
P.S Estou usando PowerPoint e Excel 2010 no Windows 7.
Existe uma maneira de fazer isso no Excel?O resto do meu código está no Excel e seria ótimo fazer isso como parte da macro.
Basicamente, tenho um local de arquivo que desejo usar, por exemplo.C:\insertfoldername\imagename.jpeg aparece na coluna H da planilha (cerca de 400 linhas).
O modelo Powepoint que estou usando tem o quadro da imagem (aquele no Powerpoint, que quando você passa o mouse sobre ele diz. "Inserir imagem do arquivo".
Eles já estão dimensionados e estão no local certo.
O que eu quero fazer é, no Excel, colar a imagem do caminho do arquivo que está no Excel e colá-la naquele quadro de imagem específico.
Isso será possível?
Basicamente algo que fará isso:
PPT.ActivePresentation.Slides(2).Shapes(3)LoadImage(spath)
Abaixo está o código que estou usando.
**** Indica o caminho do arquivo.o arquivo jpg é definido como a terceira coluna da planilha do Excel.
Sub CreateSlides()
'Dim the Excel objects
Dim objWorkbook As New Excel.Workbook
Dim objWorksheet As Excel.Worksheet
'Dim the File Path String
Dim strFilePath As String
'Dim the PowerPoint objects
Dim PPT As Object
Dim pptSlide As PowerPoint.Slide
Dim pptLayout As PowerPoint.CustomLayout
Dim pptNewSlide As PowerPoint.Slide
Dim str As String
Dim Title As String
Set PPT = GetObject(, "PowerPoint.Application")
PPT.Visible = True
'Get the layout of the first slide and set a CustomLayout object
Set pptLayout = PPT.ActivePresentation.Slides(1).CustomLayout
'Run the OpenFile function to get an Open File dialog box. It returns a String containing the file and path.
strFilePath = OpenFile()
'Open the Excel file
Set objWorkbook = Excel.Application.Workbooks.Open(strFilePath)
'Grab the first Worksheet in the Workbook
Set objWorksheet = objWorkbook.Worksheets(1)
'Loop through each used row in Column A
For i = 2 To objWorksheet.Range("A65536").End(xlUp).Row
Set PPT = GetObject(, "PowerPoint.Application")
Set pptNewSlide = PPT.ActivePresentation.Slides.AddSlide(PPT.ActivePresentation.Slides.Count + 1, pptLayout)
'Get the number of columns in use on the current row
Dim LastCol As Long
Dim boldWords As String
boldWords = "Line1: ,line2: ,Line3: ,Line4: "
LastCol = objWorksheet.Rows(i).End(xlToRight).Column
If LastCol = 16384 Then LastCol = 1 'For some reason if only column 1 has data it returns 16384, so correct it
'Build a string of all the columns on the row
str = ""
str = "Line1: " & str & objWorksheet.Cells(i, 1).Value & Chr(13) & _
"Line2: " & objWorksheet.Cells(i, 2).Value & Chr(13) & _
"Line3: " & objWorksheet.Cells(i, 10).Value & Chr(13) & _
"Line4: " & objWorksheet.Cells(i, 7).Value & Chr(13) & Chr(13) & _
objWorksheet.Cells(i, 14).Value
sfile = Cells(i, 3) & ".jpg" **** This is the jpg name
Set PPT = GetObject(, "PowerPoint.Application")
spath = "C:\test\"
'Write the string to the slide
pptNewSlide.Shapes(2).TextFrame.TextRange.Text = objWorksheet.Cells(i, 3).Value 'This enters the film Title
PPT.ActivePresentation.Slides(PPT.ActivePresentation.Slides.Count).Shapes(1).TextFrame.TextRange.Text = str
BoldSomeWords PPT.ActivePresentation.Slides(PPT.ActivePresentation.Slides.Count).Shapes(1), str, boldWords
'This is where I want to load in the Image.
'PPT.ActivePresentation.Slides(PPT.ActivePresentation.Slides.Count).Shapes(3).Picture = LoadPicture(spath) ' & sfile)
'PPT.ActivePresentation.Slides(2).Shapes(3)LoadImage((spath))
Next
End Sub
Function OpenFile()
'Dim the File Dialog object and string
Dim objFileDialog As FileDialog
Dim strFile As String
'Set the objFileDialog to an instance of the FileDialog object
Set objFileDialog = Application.FileDialog(msoFileDialogFilePicker)
'Set the Properties of the objFileDialog object
objFileDialog.AllowMultiSelect = False
objFileDialog.ButtonName = "Select"
objFileDialog.InitialView = msoFileDialogViewDetails
objFileDialog.Title = "Select Excel File"
objFileDialog.InitialFileName = "C:\"
objFileDialog.Filters.Clear
objFileDialog.Filters.Add "Excel", "*.xls; *.xlsx", 1
objFileDialog.FilterIndex = 1
'Show the FileDialog box
objFileDialog.Show
'Set strFile to the first record of the SelectedItems property of our FileDialog
strFile = objFileDialog.SelectedItems(1)
'Return the File Path string
OpenFile = strFile
End Function
Solução
É assim que você adiciona imagens no PPT atualmente aberto Picture PlaceHolders
usando Excel.
Nós costumavamos Early Binding
adicionando o Microsoft PowerPoint 14.0 Object Library
referência.
Editar1: Adicionando DoEvents e algumas explicações
Sub ImportPictureInPlaceHolderFromExcel()
Dim oPPt As PowerPoint.Application
Dim oPPtSlide As PowerPoint.Slide
Dim oPPtShp As PowerPoint.Shape
'~~> Get hold of PPt instance meaning your currently open PPT presentation
Set oPPt = GetObject(, "Powerpoint.Application")
'~~> Reference the first slide which should contain picture placeholders
Set oPPtSlide = oPPt.ActivePresentation.Slides(1)
'~~> Now check each shape in slide
For Each oPPtShp In oPPtSlide.Shapes
'~~> You only need to work on Picture place holders
If oPPtShp.PlaceholderFormat.Type = ppPlaceholderPicture Then
With oPPtShp
'~~> Now add the Picture
'~~> For this example, picture path is in Cell A1
oPPtSlide.Shapes.AddPicture Range("A1").Value, msoFalse, msoTrue, _
.Left, .Top, .Width, .Height
'~~> Insert DoEvents here specially for big files, or network files
'~~> DoEvents halts macro momentarily until the
'~~> system finishes what it's doing which is loading the picture file
DoEvents
End With
End If
Next
Set oPPtSlide = Nothing
Set oPPt = Nothing
End Sub
Resumindo:
1.Conseguimos o aplicativo PPT
2.Obtemos o slide e as formas dentro do slide
3.Agora escolhemos formas que são ppPlaceholderPicture
digite apenas
4.Nós usamos o Shape Object's
(tipo ppPlaceholderPicture) .Top, .Left, .Width and .Height
propriedade como argumento para Coleção de formas .AddPicture
método.
E pronto, você adicionou uma imagem ao seu PPT Picture Placeholder.
Espero que seja isso que você precisa.
Outras dicas
Enquanto isso parece funciona quando você adiciona uma imagem a um slide com uma imagem vazia ou espaço reservado para conteúdo. Ele sempre irá para esse espaço reservado e será redimensionado para caber.
Você só precisa adicioná-lo assim:
osld.Shapes.AddPicture "Path", msoFalse, msoTrue, -1, -1