martes, 10 de octubre de 2017

VBA: Rellenar objetos en Power Point desde celdas de Excel

La idea del post de hoy es comprobar cómo podemos rellenar, con el contenido de nuestras celdas de Excel, algunos objetos de una presentación de PowerPoint.

Primero tenemos que tener una presentación ya generada, con diferentes objetos ya insertados.
Veamos un ejemplo:

VBA: Rellenar objetos en Power Point desde celdas de Excel


En mi ejemplo dispongo de:
- un objeto Título
- un cuadro de texto (CuadroTexto 1)
- una autoforma (Elipse 1)
- un gráfico...

Es fundamental, para facilitar la labor, tener identificados los objetos sobre los que vamos a trabajar (volcar la información desde Excel).
Puedes mostrar el panel de selección para este fin.


En nuestra hoja de cálculo, dentro de un libro de trabajo, tenemos la información a trasladar:

VBA: Rellenar objetos en Power Point desde celdas de Excel


Es importante que sepas que, con lo que describiremos a continuación, no se traspasan los formatos dados en Excel... por ejemplo, si te fijas en la celda A5, en realidad, el valor de la celda es 1234!!, y no lo que mediante un formato personalizado se visualiza!!.
Esto vale para cualquier tipo de formato!!.


Añadimos el siguiente código en un módulo estándar de nuestro proyecto de VB:

Sub TrasladarDatoExcelaPPT()
Dim oPPT As Object, oPrsn As Object, oSlide As Object
Dim oShape1 As Object, oShape2 As Object
Dim ficheroPPT As String

'La ruta completa de la presentación de PPT
ficheroPPT = "E:\excelforo\Excel_a_PPt.pptx"

'Definimos el objeto de trabajo PowerPoint
On Error Resume Next
Set oPPT = GetObject(, "PowerPoint.Application")
'controlamos posibles errores
If Err.Number <> 0 Then
    'y creamos el objeto, i.e., la presentación
    Set oPPT = CreateObject("PowerPoint.Application")
End If
Err.Clear
On Error GoTo 0
'hacemos visble la aplicación (voluntario.. pero recomendable)
oPPT.Visible = True

'Abriremos nuestra presentación
Set oPrsn = oPPT.Presentations.Open(ficheroPPT)
'accedemos a la primera diapositiva...
Set oSlide = oPrsn.Slides(1)
'...y nos centramos en las autoformas, cuadros de texto, etc
'(es importante tener controlado el destino previamente!!!)
Set oShape1 = oSlide.Shapes("CuadroTexto 1")
Set oShape2 = oSlide.Shapes("Elipse 1")

'modificamos el texto del Título
oSlide.Shapes.Title.TextFrame.TextRange.Text = "Modificación realizada"
'y finalmente llevamos el contenido de la celda A1 de la hoja1 de nuestro libro
'al objeto 1 (al cuadro de texto)
oShape1.TextFrame.TextRange.Text = _
    ThisWorkbook.Sheets(1).Range("A1").Value
'y el contenido de la celda A5 a la Elipse de la diapositiva
oShape2.TextFrame.TextRange.Text = _
    ThisWorkbook.Sheets(1).Range("A5").Value

'guardamos y cerramos la aplicación (PPT)
'oPPPrsn.Save
'oPPPrsn.Close
'oPPApp.Quit

'y liberamos memoria
Set oPPT = Nothing
Set oPrsn = Nothing
Set oSlide = Nothing
Set oShape1 = Nothing
Set oShape2 = Nothing
End Sub



Estamos listos... Ya podemos ejecutar nuestra macro.
Podremos ver como se van produciendo los cambios hasta llegar al resultado final:

No hay comentarios:

Publicar un comentario