Copiar un gráfico de Excel a PowerPoint con VBA

Todo aquel que realiza informes periódicos sabe lo aburrido que puede llegar a ser volcar los resultados gráficos de Excel a PowerPoint. En mi caso particular es una tarea que me lleva aproximadamente una hora todas las semanas… pero hay una persona del equipo que dedica prácticamente un día entero.

En este tutorial os explicamos como automatizar la tarea de copiar un gráfico de Excel a PowerPoint con VBA. No es una tarea sencilla puesto que requiere mucho tiempo de ajuste de los parámetros… pero no son difíciles de realizar, es una cuestión de prueba y error.

Crear reporte en powerpoint

Explicación general

Este ejercicio se compone de dos archivos (tal y como yo lo tengo configurado). Uno de los archivos es el PowerPoint donde pegaremos los gráficos (y tablas… que también se puede) y el otro es el Excel desde el que llevaremos los datos a PowerPoint.

Dentro del Excel tendremos un módulo con tres macros:

  • Macro principal para abrir el archivo de PowerPoint
  • Macro secundaria para copiar un gráfico
  • Macro secundaria para copiar una tabla

En VBA de Excel deberemos añadir la librería de objetos de PowerPoint: Microsoft Office PowerPoint Library. Para realizar esto es muy sencillo. En la pantalla de VBA ir a Herramientas (tools) >> References (referencias) y seleccionar del listado. Esto nos permitirá usar desde Excel los objetos de PowerPoint (para poder abrir un powerpoint, ir a una slide en concreto y usar las propiedades necesarias para pegar las imágenes).

Para este tutorial de  como copiar un gráfico de Excel en PowerPoint con VBA hemos creado:

  • una presentación de PowerPoint que se llama «Template ExcelyVBA»
  • y un libro de Excel llamado «Copiar de Excel a PowerPoint»  con dos hojas: análisis y datos donde en cada una hay una tabla y un gráfico diferentes para poder realizar este ejemplo.

Macro principal

Como ya hemos comentado, esta macro nos permitirá abrir el archivo de PowerPoint «Template ExcelyVBA» e irá llamando a las otras dos macros para seleccionar los archivos de Excel y pegarlos en el PowerPoint como imágenes.

Las siguientes líneas de código para la macro principal son las siguientes:

 

Sub GeneraInformePPT()
 
' NOTA: Necesita habilitar en Herramientas−Referencias las librerias Microsoft PowerPoint Library
 
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Parametros
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    rutaActual = ThisWorkbook.Path
    rutaPlantilla = rutaActual & "\Template ExcelyVBA.pptx" 'IMPORTANTE La plantilla del informe debe estar en el mismo path que el excel
 
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Apertura el ppt y comprobaciones
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
    'Se abre el Powerpoint si no estuviera abierto
    If ppApp Is Nothing Then Set ppApp = New PowerPoint.Application
    ppApp.Visible = True
    
    'Comprobamos que la presentacion existe y que no este vacia
    On Error Resume Next
    Set ppPresentation = ppApp.Presentations.Open(rutaPlantilla)
    On Error GoTo 0
    If ppPresentation Is Nothing Then
     MsgBox "La plantilla " & rutaPlantilla & " no se encuentra en la ruta especificada", vbCritical
            Exit Sub
    End If
    
    'Comprobamos que la presentacion no este vacia
    If ppPresentation.Slides.Count = 0 Then
        MsgBox "La plantilla " & rutaPlantilla & " está vacia", vbCritical
        Exit Sub
    End If
    
    
    Call Copiar_Tabla("Analisis", "B4:C11", 2, 0, −40)
    
    Call Copiar_Tabla("Datos", "D4:G18", 3, 50, −50)
    
    Call Copiar_Grafico("Analisis", "Grafico_Analisis", 4, 25)
    
    Call Copiar_Grafico("Datos", "Grafico_Datos", 5, 50)
 
End Sub

Al final de esta macro vemos que hay 4 llamadas («Call») a otras dos macros: Copiar_Tabla y Copiar_Grafico. Estas macros se explican a continuación.

Macro para copiar gráfico

Esta macro es el núcleo duro de este pequeño desarrollo y aquí es donde está la «chicha» del asunto. En la macro utilizamos los diferentes parámetros de configuración que necesitemos y se los pasamos desde la macro principal. Los parámetros usados son:

  • Hoja en la que se encuentra el gráfico
  • Nombre del gráfico en el Excel
  • Número de slide donde vamos a copiar el gráfico
  • Distancia a la que queremos poner la imagen del centro en la vertical

Otras variables que podíamos haber utilizado son: el desplazamiento lateral desde el centro de la slide, el escalado de la imagen… y otras muchas que pueden llegar a ser necesarias en ejercicios más complejos.

El código utilizado es el siguiente:

 

Private Sub Copiar_Grafico(hoja As String, nombre_graf As String, hoja_objetivo As Integer, _
                                dist_top As Integer)
        
        'Seleccionamos la grafica octaedro
        Sheets(hoja).ChartObjects(nombre_graf).Activate
        ActiveChart.ChartArea.Copy
        
        'Copiamos la grafica
        Set ppSlide = ppPresentation.Slides(hoja_objetivo)
        ppApp.ActiveWindow.View.GotoSlide hoja_objetivo
        
        'Pasamos todas las variables
        With ppSlide.Shapes.PasteSpecial(ppPasteEnhancedMetafile)
            .Align msoAlignLefts, msoTrue
            .Align msoAlignCenters, True
            .Align msoAlignMiddles, True
            .IncrementTop (dist_top)
        End With

End Sub

Este pedazo de código no hay que repetirlo, trabaja como una función a la que le pasamos los parámetros desde la macro principal y que nos irá haciendo el trabajo de copiar los gráficos en nuestro PowerPoint.

Macro para copiar rango de celdas como imagen

También podremos copiar un rango de celdas desde Excel a PowerPoint como una imagen. Esta opción puede ser de gran ayuda en el caso de que tengamos datos que mostrar de esta manera. El código empleado es muy similar al anterior con la salvedad de que lo que copiamos es un rango y no un objeto.

Private Sub Copiar_Tabla(hoja As String, rango_tabla As String, slide_objetivo As Integer, _
                            dist_top As Integer, dist_left As Integer)
                
        'Copiamos las tablas como imagen
        Sheets(hoja).Select
        Sheets(hoja).Range(rango_tabla).Select
        Selection.Copy
        
        'Copiamos la grafica
        Set ppSlide = ppPresentation.Slides(slide_objetivo)
        ppApp.ActiveWindow.View.GotoSlide slide_objetivo
        
        'Pasamos todas las variables
        With ppSlide.Shapes.PasteSpecial(ppPasteEnhancedMetafile)
            .ScaleWidth 1.1, msoFalse
            .Align msoAlignRights, msoTrue
            .Align msoAlignCenters, msoTrue
            .Align msoAlignMiddles, True
            .IncrementTop (dist_top)
            .IncrementLeft (dist_left)
        End With


End Sub

 

 

Ejemplo real para copiar un gráfico de Excel a PowerPoint con VBA

Pero es de todos conocido que «si no lo veo no lo creo» así que os dejo aquí los dos archivos necesarios para poder hacer esto. Podéis usarlos de base para vuestras macros.

No olvides colocarlos en la misma carpeta, sino, esta macro fallará.

Template ExcelyVBA

Copiar de Excel a PowerPoint

(Visited 24.566 times, 1 visits today)

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