¿Cómo agregar imágenes al marcador de posición de imagen de presentación de Powerpoint?
-
21-12-2019 - |
Pregunta
Creé un código en Excel VBA para crear una presentación de PowerPoint con 1 diapositiva para cada fila de Excel y completarla en un cuadro de texto específico en PowerPoint.
Ahora quiero agregar todas las imágenes que coincidan con la descripción.Todos estos son archivos JPEG y no gráficos, etc.
¿Cómo puedo hacer esto? ¿Es mejor hacerlo en Excel o es mejor hacer este Powerpoint VBA?
De cualquier manera, ¿alguien podría ayudarme con algún código sobre cómo hacer esto, por favor?
Los marcos de imágenes ya existen en PowerPoint.Hay 2 imágenes por diapositiva (sin transiciones ni nada).
¡Gracias!
P.D. Estoy usando PowerPoint y Excel 2010 en Windows 7.
¿Hay alguna manera de hacer esto desde Excel?El resto de mi código está en Excel y sería genial hacerlo como parte de la Macro.
Básicamente tengo una ubicación de archivo que quiero usar, por ejemplo.C:\insertfoldername\imagename.jpeg aparece en la columna H de la hoja de cálculo (alrededor de 400 filas).
La plantilla de Powepoint que estoy usando tiene el marco de imagen (el de Powerpoint, que cuando pasas el cursor sobre él dice..."Insertar imagen desde archivo".
Estos ya tienen el tamaño adecuado y están en el lugar correcto.
Lo que quiero hacer es, en Excel, pegar la imagen de la ruta del archivo que está en Excel y pegarla en ese marco de imagen específico.
¿Será eso posible en absoluto?
Básicamente algo que hará esto:
PPT.ActivePresentation.Slides(2).Shapes(3)LoadImage(spath)
A continuación se muestra el código que estoy usando.
**** Indica la ruta del archivo.el archivo jpg se establece como la tercera columna en la hoja de cálculo de 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
Solución
Así es como se agregan imágenes en un PPT actualmente abierto Picture PlaceHolders
utilizando Excel.
Nosotros usamos Early Binding
agregando el Microsoft PowerPoint 14.0 Object Library
referencia.
Editar1: Agregando DoEvents y alguna explicación.
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
Para resumir:
1.Nos hacemos con la aplicación PPT
2.Nos hacemos con la diapositiva y las formas dentro de la diapositiva.
3.Ahora elegimos formas que son ppPlaceholderPicture
solo tipo
4.Usamos el Shape Object's
(ppPlaceholderTipo de imagen) .Top, .Left, .Width and .Height
propiedad como argumento a favor Colección de formas .AddPicture
método.
Y ahí lo tienes, has agregado una imagen en tu marcador de posición de imagen PPT.
Espero que esto sea lo que necesitas.
Otros consejos
Mientras que parece Funciona cuando agregas una imagen a una diapositiva con una imagen vacía o un marcador de posición de contenido; siempre irá a ese marcador de posición y cambiará su tamaño para que quepa.
Sólo necesitas agregarlo así:
osld.Shapes.AddPicture "Path", msoFalse, msoTrue, -1, -1