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