Вы находитесь на странице: 1из 5

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.

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.
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:

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:

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:
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:

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:
1 Sub CrearPowerPoint()
2
3 'Definición de variables
4 Dim archivoPPT As PowerPoint.Application
5 Dim diapositiva As PowerPoint.Slide
6 Dim hojaXLS As Excel.Worksheet
7 Dim grafico As Excel.ChartObject
8
9 'Instancia del objeto PowerPoint.Application
10 Set archivoPPT = New PowerPoint.Application
11
12 'Creamos una presentación PowerPoint
13 archivoPPT.Presentations.Add
14
15 'Recorrer tods los gráficos en nuestro libro de Excel
16 For Each hojaXLS In ThisWorkbook.Worksheets
17 For Each grafico In hojaXLS.ChartObjects
18
19 'Agregar nueva diapositiva
20 archivoPPT.ActivePresentation.Slides.Add _
21 archivoPPT.ActivePresentation.Slides.Count + 1, ppLayoutBlank
22 archivoPPT.ActiveWindow.View.GotoSlide _
23 archivoPPT.ActivePresentation.Slides.Count
24 Set diapositiva = archivoPPT.ActivePresentation.Slides( _
25 archivoPPT.ActivePresentation.Slides.Count)
26
27 'Copiar gráfico en la dispositiva
28 hojaXLS.ChartObjects(grafico.Index).Chart.CopyPicture
29 diapositiva.Shapes.Paste.Select
30
31 'Centramos la imagen insertada
32 archivoPPT.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, msoTrue
33 archivoPPT.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, msoTrue
34
35 Next
36 Next
37
38 'Eliminamos las instancias creadas
39 Set diapositiva = Nothing
40 Set archivoPPT = Nothing
41 Set grafico = Nothing
42 Set hojaXLS = Nothing
43
44 End Sub

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

Вам также может понравиться