Exportar datos de Excel a PowerPoint mediante una macro

Hoy vamos a enseñaros como exportar de Excel a PowerPoint tablas con valores y formato mediante una macro. Esta herramienta es muy útil cuando tenemos una presentación de PowerPoint llena con datos de Excel sujetos a continuas revisiones. Mediante la creación de una macro (¿qué es una macro?) como esta podemos ahorrarnos interminables horas de trabajo copiando y pegando datos de un documento a otro. Más adelante publicaremos otro artículo explicando el caso para pasar datos de Excel a Word, aunque ya te podrás imaginar que el proceso es prácticamente el mismo.

A continuación mostramos dos ejemplos. El primero de ellos explica como exportar datos de Excel a una nueva presentación de PowerPoint. El segundo ejemplo (un poco más complicado) muestra como copiar datos de Excel y pegarlos en un determinada Presentación de PowerPoint reemplazando los datos ya existentes.

Vamos a ello:

Ejemplo 1 – Exportar datos de Excel a una Nueva Presentación de PowerPoint.

Como siempre, primero abrimos el Editor de Visual Basic (VBE) y a continuación vamos a insertar un módulo (Insertar>>Módulo).

Habilitar referencias de PowerPoint

Para hacer referencia a elementos de PowerPoint tenemos que activar la librería de PowerPoint. Para ello vamos a hacer clic en Herramientas>>Referencias tal como se muestra en la imagen a continuación:

Exportar datos Excel PowerPoint

En la Biblioteca de Referencias tendemos que buscar y activar la referencia: “Microsoft PowerPoint 15.0 Object Library”. Dependiendo de la versión de Microsoft Office que tengas instalada puede que la referencia sea diferente (ej. Microsoft PowerPoint 12.0 Object Library).
En la imagen a continuación mostramos la referencia que tenemos que activar y las que ya vienen activadas por defecto.

Exportar datos Excel PowerPoint

Una vez activada la referencia a PowerPoint ya podemos usar en nuestra macro elementos de PowerPoint. El código completo para exportar datos a un nuevo PowerPoint es el siguiente:

Código para exportar de Excel a PowerPoint

Sub ExportaraPowerPoint()

Dim pptApp As PowerPoint.Application
Dim pptPres As PowerPoint.Presentation
Dim pptSlide As PowerPoint.Slide
Dim pptShape As PowerPoint.Shape
Dim excelTable As Excel.Range
Dim i As Integer

'Asignar la tabla que queremos copiar a la variable excelRange
Set excelTable = Worksheets("Ejemplo").Range("B7:G12")

'Comprobar si PowerPoint esta abierto y en caso de no estarlo abrirlo
On Error Resume Next
Set pptApp = GetObject("", "PowerPoint.Application")
Err.Clear
If pptApp Is Nothing Then Set pptApp = CreateObject(class:="PowerPoint.Appliaction")
pptApp.Visible = True
pptApp.Activate

'Crear una nueva presentacion de PowerPoint
Set pptPres = pptApp.Presentations.Add
Set pptSlide = pptPres.Slides.Add(1, ppLayoutBlank)

'Copiar la tabla de Excel
excelTable.Copy

'Pegar la tabla de Excel en PowerPoint y centrarla en la diapositiva
pptSlide.Shapes.PasteSpecial(ppPasteEnhancedMetafile).Select
pptApp.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
pptApp.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True

End Sub

Breve explicación del código para exportar de Excel a PowerPoint

Como podéis ver hemos insertado comentarios en el código explicando las diferentes instrucciones para facilitar la comprensión del mismo. Insertar comentarios es muy útil, especialmente para códigos complejos que vayan a usar otras personas. Para insertar un comentario en VBA simplemente deberás añadir una comilla sencilla antes de la frase de texto que quieras insertar.

Lo primero que hemos hecho, como siempre, es definir las variables. Cuando tenemos variables de diferentes referencias debemos escribir primero a que biblioteca de objetos a la que pertenece nuestra variable.

Después asignamos la tabla a la variable excelTable. En nuestro ejemplo esta tabla ocupa el Rango B7:G12.

Para comprobar si PowerPoint ya está abierto lo que vamos a hacer es intentar seleccionarlo. Obviamente si PowerPoint no está abierto nuestra macro no lo podrá seleccionar y Excel nos devolverá un error. Para evitar este error hemos escrito “On Error Resume Next” antes de pedirle que abra PowerPoint. Lo que quiere decir “On Error Resume Next” es que en caso de encontrar un error lo ignore y continúe con la siguiente línea de código. Esta instrucción es muy peligrosa y se debe utilizar con cuidado, hay que ser consciente de qué error se puede generar y qué queremos hacer en caso de que ocurra. Ignorar errores de forma continua a lo largo de todo el código no es una buena estrategia. Después de la línea de código que puede generar error hemos escrito la instrucción Err.Clear que hace que a partir de ese momento deje de ignorar los errores. El condicional que sigue a Err.Clear hace que en caso de que no estuviera abierto PowerPoint, lo abra, lo haga visible y lo active.

Ya hemos conseguido que nuestra macro abra PowerPoint. A continuación le decimos a PowerPoint que cree una nueva presentación y que añada una diapositiva a esta presentación.

Por último vamos a copiar nuestra tabla de Excel a PowerPoint y lo vamos a hacer como un EnhancedMetafile. Esta es una de las muchas formas de pegar datos de Excel a PowerPoint. Para ver las demás opciones podemos vaciar el paréntesis que sigue a PasteSpecial y pulsar Ctrl+Espacio y a continuación Excel nos mostrará todas las posibilidades:

Exportar datos Excel PowerPoint

Finalmente, las dos últimas líneas de código centran nuestra Tabla vertical y horizontalmente.

Ejemplo 2 – Exportar datos de Excel a una Presentación de PowerPoint Existente

En este ejemplo os enseñamos como exportar tablas a una presentación de PowerPoint seleccionada. Esta macro es especialmente útil en el caso de presentaciones que contengan datos que son revisados continuamente.

El Ejemplo consta de dos partes, un archivo de PowerPoint donde vamos a exportar nuestros datos y un archivo de Excel que contiene la macro.

Crear archivo de PowerPoint

Para que la macro sea capaz de reemplazar las tablas de datos en PowerPoint están deben tener un nombre conocido. La macro buscará las tablas por su nombre, y cuando encuentre la tabla que está buscando la reemplazará por otra definida en Excel.

En el archivo de PowerPoint que hemos creado para nuestro ejemplo, existen dos diapositivas con una tabla en cada diapositiva. Hemos nombrado estas tablas “Tabla1” y “Tabla2”. Para nombrar elementos en PowerPoint deberemos seleccionar la tabla y hacer clic en la pestaña Formato>>Panel de Selección. Se abrirá una nueva ventana que nos permitirá editar el nombre de los elementos tal como se muestra en la imagen a continuación:

Exportar datos Excel PowerPoint

Crear Archivo de Excel

Una vez tengamos nuestro archivo de PowerPoint creado vamos a crear la macro que nos permita sustituir de manera automática tablas en Excel por tablas existentes en el PowerPoint.

Lo primero, como siempre, es abrir el Editor de Visual Basic (VBE).

Habilitar Referencias

A continuación y de manera similar a como hemos hecho en el ejemplo anterior tendremos que activar dos librerías de objetos. Las dos librerías son las siguientes:

  • Microsoft PowerPoint 15.0 Object Library
  • Microsoft Scripting Runtime.

Exportar datos Excel PowerPoint

Una vez activadas nuestras librerías vamos a escribir nuestro código. El código completo de nuestra macro es el siguiente:

Código para exportar tablas de Excel a un PowerPoint seleccionado y sustituirlas por  tablas ya existentes

Sub ExportaraPowerPointSeleccionado()

Dim pptApp As PowerPoint.Application
Dim pptPres As PowerPoint.Presentation
Dim pptSlide As PowerPoint.Slide
Dim pptShape As PowerPoint.Shape
Dim tableranges() As Excel.Range
Dim windowdialog As Office.FileDialog
Dim pptPath, pptName, lastpptPath As String
Dim FSO As Scripting.FileSystemObject
Dim check As Boolean
Dim i As Integer
Set FSO = New FileSystemObject

'Asignar tablas a variables tableranges()
ReDim tableranges(1 To 2)
For i = 1 To 2
    Set tableranges(i) = ActiveWorkbook.Worksheets("Ejemplo"). _
    Range(Cells(7 + 7 * (i - 1), 2), Cells(12 + 7 * (i - 1), 7))
Next i

'Abrir ventana de dialogo para seleccionar archivo de PowerPoint
Set windowdialog = Application.FileDialog(msoFileDialogFilePicker)
    With windowdialog
        .AllowMultiSelect = False
        .Title = "Please Select a File"
        .Filters.Clear
        .Filters.Add "PPT", "*.ppt"
        .Filters.Add "All File", ""
        .ButtonName = "Select Report"
        .InitialFileName = ActiveWorkbook.Path
            If .Show = True Then
            pptPath = .SelectedItems(1)
            End If
         End With
pptName = FSO.GetFileName(pptPath)
lastpptPath = FSO.GetParentFolderName(pptPath)

'Comprobar que PowerPoint esta abierto
On Error Resume Next
Set pptApp = GetObject("", "PowerPoint.Application")
Err.Clear
If pptApp Is Nothing Then Set pptApp = CreateObject(class:="PowerPoint.Appliaction")
pptApp.Visible = True
pptApp.Activate

'Comprobar si el archivo seleccionado ya esta abierto
On Error GoTo OpenPresentation
Set pptPres = pptApp.Presentations(pptName)
GoTo ContinueHere
OpenPresentation:
Set pptPres = pptApp.Presentations.Open(pptPath)
ContinueHere:

'Buscar la tabla en el PowerPoint y sustituirla
i = 1
For Each pptSlide In pptPres.Slides
        pptSlide.Select
    For Each pptShape In pptSlide.Shapes
        If pptShape.Name = "Tabla" & i Then
            pptShape.Select
            pptShape.Delete
            tableranges(i).Copy
            pptSlide.Shapes.PasteSpecial(ppPasteEnhancedMetafile).Name = ("Tabla" & i)
            i = i + 1
        End If
    Next pptShape
Next pptSlide

'Recolocar las tablas y centrarlas en la diapositiva
For Each pptSlide In pptPres.Slides
    For Each pptShape In pptSlide.Shapes
        For i = 1 To pptSlide.Shapes.Count
            If pptShape.Name = "Tabla" & i Then
            pptShape.Left = ActiveWindow.Left + 200
            pptShape.Top = ActiveWindow.Top + 200
            End If  
      Next i
    Next pptShape
Next pptSlide

End Sub

Explicación del código

En la primera parte del código definimos nuestras variables.

A continuación hemos redimensionados la matriz tableranges( ) para que contenga dos elementos. Los elementos que contiene esta matriz son del tipo Range (rango) tal como hemos definido al crear la variable (dim tablerange() as Excel.Range)

Mediante un bucle hemos asignado el rango a estas variables. Hemos podido hacer esto porque nuestras tablas son de iguales dimensiones. También se podría haber hecho asignando de manera individual el rango a cada elemento de la matriz:

Redim tablerange(1 to 2) 
Set tablerange(1) = Activeworkbook.WorkSheets(“Ejemplo”).Range(“B7:G12”) 
Set tablerange(2) = Activeworkbook.WorkSheets(“Ejemplo”).Range(“B14:G19”)

Como podéis ver parece más sencillo asignar el rango a nuestras variables de forma manual que mediante un bucle. Esto es debido únicamente a que tenemos sólo dos tablas. Usar un bucle siempre es una mejor opción para el caso que tengamos una mayor cantidad de datos.

Una vez asignadas nuestras variables abrimos una ventana de dialogo. Los diferentes elementos definidos en el código están explicados en la imagen a continuación:

Exportar datos Excel PowerPoint

Una vez hemos seleccionado el archivo de PowerPoint en el que queremos reemplazar los datos, comprobaremos si PowerPoint está abierto y en caso de no estarlo lo abriremos. El código es el mismo que el que usamos en el ejemplo anterior.

Ahora tendremos que comprobar si el archivo seleccionado ya está abierto. Si omitimos esta parte del código cada vez que ejecutemos la macro y el archivo esté abierto se abrirá una nueva copia de la presentación de PowerPoint en modo lectura y se harán los cambios en ese documento.

Una vez tenemos nuestra presentación de PowerPoint abierta vamos a buscar nuestras tablas para reemplazarlas. Para ello hemos creado un bucle que busca en cada diapositiva de la presentación todos los elementos que hay y en caso de que alguno de estos elementos se llame Tabla1 lo sustituirá por excelrange(1). Una vez pegado cambiará el nombre de este elemento a Tabla1 para que en el futuro podamos repetir esta macro y vuelva a encontrar las tablas.En el siguiente ciclo del bucle la macro buscará Tabla2 para reemplazarla por excelrange(2) y así sucesivamente.

Por último hemos creado otro bucle que ajusta la posición de las tablas pegadas. Este bucle busca las Tablas que acabamos de pegar y la alinea en la esquina superior izquierda de la diapositiva. Después movemos las tablas 200 puntos hacia abajo y 200 puntos hacia la derecha. Cada punto equivale a 1/72 de pulgada o aproximadamente 0.35mm. La mejor manera de saber cuánto tenemos que mover nuestras tablas es mediante prueba y error.

Bonus track: Descarga estos ejemplos

Ya se que estos ejemplos son muy golosos. Por eso te los dejo aquí para que te los puedas descargar y probar tú tranquilamente en tú ordenador

[sociallocker]

Exportar datos de Excel a PowerPoint – Archivo de Excel

Exportar datos de Excel a PowerPoint – Archivo de PowerPoint

[/sociallocker]

(Visited 58.366 times, 1 visits today)
Categorías VBA

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información ACEPTAR

Aviso de cookies