Crear presentación PowerPoint con VBA

Excel es una gran herramienta para el manejo de datos y la creación de gráficos, pero cuando llega el momento de hacer una presentación en público generalmente utilizamos PowerPoint por los beneficios que ofrece a los presentadores. Sin embargo el proceso de copiar y pegar los gráficos de Excel a una presentación PowerPoint puede ser tardado y muy repetitivo.

Hoy aprenderemos como llevar todos los gráficos contenidos en un libro de Excel hacia una presentación PowerPoint con solo ejecutar una macro y en el proceso aprenderemos un poco más de VBA.  Así que sin más preámbulos comencemos a escribir código.

Librería de Objetos PowerPoint

Para poder utilizar las instrucciones VBA que nos permiten interactuar con PowerPoint es necesario agregar una referencia hacia la Librería de objetos de PowerPoint. Para hacerlo abrimos el Editor de Visual Basic y vamos a la opción Herramientas > Referencias y se mostrará el cuadro de diálogo Referencias.

Librería de objetos PowerPoint

Busca la librería llamada Microsoft PowerPoint Object Library. En mi caso tengo instalada la versión 14.0 que se refiere a la versión de PowerPoint 2010. Una vez seleccionada la librería haz clic en el botón Aceptar y estaremos listos para utilizar los objetos de PowerPoint desde nuestra macro en Excel.

Macro para crear archivo PowerPoint

El primer paso en la creación de la macro será insertar un nuevo módulo de código para colocar la subrutina que para este ejemplo he llamado CrearPowerPoint. Las primeras líneas de código las utilizaremos para definir las variables de nuestra macro.

Crear archivo PowerPoint desde VBA

Las variables que utilizaremos son las siguientes:

  • archivoPPT: variable que tendrá una referencia al objeto PowerPoint.Application el cual nos permite interactuar con PowerPoint
  • diapositiva: variable que representará una diapositiva dentro de la presentación PowerPoint
  • hojaXLS: variable que contendrá una referencia  a un objeto Excel.Worksheet y que será de utilidad para recorrer todas las hojas de nuestro libro.
  • grafico: variable que hará referencia a un objeto que representará cada gráfico del libro de Excel.

Continuando con la construcción de la macro, agregaré un par de instrucciones para crear una instancia del objeto PowerPonit.Application en la variable archivoPPT y posteriormente crearé la presentación PowerPoint:

Macro para crear archivo PowerPoint

Copiar cada gráfico a una diapositiva

Una vez que hemos creado la presentación debemos centrarnos en la parte más importante de nuestra macro que es el bucle que recorrerá todas las hojas del libro Excel y por cada gráfico encontrado insertará una nueva diapositiva en la presentación PowerPoint para posteriormente copiar el gráfico de Excel:

Crear presentación PowerPoint desde Excel con VBA

Puedes observar dos bucles For Each. El primero es para recorrer todas las hojas del libro y el segundo para recorrer todos los gráficos dentro de una misma hoja. De esta manera, no importa la cantidad de gráficos que tengas en cada hoja, la macro insertará una diapositiva para cada uno de ellos. Después de crear la diapositiva se copiará el gráfico y finalmente se hace el centrado de la imagen dentro de la diapositiva.

Comprobación de la macro

Tengo un archivo de Excel que tiene 2 hojas y tres gráficos que están distribuidos de la siguiente manera. La hoja Temperatura tiene 1 gráfico y la hoja Viento tiene 2 gráficos:

Insertar gráficos de Excel en PowerPoint con VBA

Para ejecutar la macro voy a la ficha Programador, pulso el botón Macros y selecciono la macro recién creada. Como resultado obtengo una presentación de PowerPoint que contiene una diapositiva para cada uno de los gráficos del libro de Excel:

PowerPoint generado con VBA desde Excel

De esta manera hemos copiado todos los gráficos de un libro de Excel a una presentación de PowerPoint de manera automática. Es muy importante recordar que la presentación PowerPoint creada por la macro no está almacenada en disco duro por lo que es necesario guardar el archivo desde PowerPoint. Para obtener el código VBA creado en este ejemplo puedes descargar el libro de Excel que he utilizado o puedes copiar el código que coloco a continuación:

Sub CrearPowerPoint()

'Definición de variables
Dim archivoPPT As PowerPoint.Application
Dim diapositiva As PowerPoint.Slide
Dim hojaXLS As Excel.Worksheet
Dim grafico As Excel.ChartObject

'Instancia del objeto PowerPoint.Application
Set archivoPPT = New PowerPoint.Application

'Creamos una presentación PowerPoint
archivoPPT.Presentations.Add

'Recorrer tods los gráficos en nuestro libro de Excel
For Each hojaXLS In ThisWorkbook.Worksheets
    For Each grafico In hojaXLS.ChartObjects
    
        'Agregar nueva diapositiva
        archivoPPT.ActivePresentation.Slides.Add _
            archivoPPT.ActivePresentation.Slides.Count + 1, ppLayoutBlank
        archivoPPT.ActiveWindow.View.GotoSlide _
            archivoPPT.ActivePresentation.Slides.Count
        Set diapositiva = archivoPPT.ActivePresentation.Slides( _
            archivoPPT.ActivePresentation.Slides.Count)
                
        'Copiar gráfico en la dispositiva
        hojaXLS.ChartObjects(grafico.Index).Chart.CopyPicture
        diapositiva.Shapes.Paste.Select
        
        'Centramos la imagen insertada
        archivoPPT.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, msoTrue
        archivoPPT.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, msoTrue
        
    Next
Next

'Eliminamos las instancias creadas
Set diapositiva = Nothing
Set archivoPPT = Nothing
Set grafico = Nothing
Set hojaXLS = Nothing

End Sub