Bienvenido a la mayor comunidad de usuarios EXCEL

Regístrate ahora y podrás: / 💪 Hacer preguntas a los expertos / ⬇️ Descargar ejemplos y plantillas / 🏅 Acceder a contenidos premium

Regístrate gratis

Exportar ppt a PDF

nightowl

New member
Estimados, estoy queriendo modificar desde excel un powerpoint y exportarlo a PDF. aun no termino el codigo pero cuando voy provbando me tira error de compilcacion con ppFixedFormatTypePDF y dice que no se ha definido la variable. Les dejo el codigo completo y si alguno me puede ayudar. he buscado en linea ejemplos y no he logrado dar con el clavo

Option Explicit
Sub Combinar()
'Declaramos a shtDatos como una hoja de calculo
Dim shtDatos As Worksheet

'Declaramos las variables que seria las columnas del excel
Dim strHuesped As String
Dim strIn As Date
Dim filaInicial As Long


'Creamos nuestras variables de tipo objeto
'objppt: Prepara archivo ppt, objPlan crea un nuevo archivo ppt, objsld crea las diapositivas, objshp alamcena los objetos de tipo cuadro de texto'
Dim objPPT As Object
Dim objPlan As Object
Dim objSld As Object
Dim objShp As Object


'Llamamos la hoja en donde Vamos a obtener los datos y se lo asignamos al objeto shtDatos
Set shtDatos = Worksheets("Datos")

Set objPPT = CreateObject("Powerpoint.Application")
objPPT.Visible = True

'Buscamos la plantilla que en este caso se llama "Plan Nutricional MODELO" la cual se encuetra en el mismo directorio que el archivo de excel'
'y se lo asignamos al objeto objPlan
Set objPlan = objPPT.presentations.Open(ThisWorkbook.Path & "\Plan Nutricional MODELO.pptx")


'una vez asignada la plantilla Informes al objeto objPlan guardamos el objeto con el nombre de Combinados.pptx
objPlan.SaveAs ThisWorkbook.Path & "\Plan Nutricional COMBINADO.pptx"

'Esta variable nos indicara donde iniciar a obtener los datos, en este caso a partir de la fila 2'
filaInicial = 2

'Creamos un ciclo, la instrucion es que, mientras en la variable filainicial y columna 1 sea diferente (<>) a campo vacio hacer los siguiente'
Do While shtDatos.Cells(filaInicial, 1) <> ""

'obtenemos el dato de la filainicial, columna 1, 2, 3, etc y se lo asignamos a la variable que corresponda
strHuesped = shtDatos.Cells(filaInicial, 1)
strIn = shtDatos.Cells(filaInicial, 2)
'strReferencia = shtDatos.Cells(filaInicial, 3)
'strFecha = shtDatos.Cells(filaInicial, 4)

'del objeto objPlan (Plan Nutricional COMBINADO.pptx) duplicamos la primera diapositiva o slide y se lo asignamos al objSld
Set objSld = objPlan.slides(8)

'ahora hara un recorrido de las formas que contenga la diapositiva, supongo que los cuadros de texto y demas tipos de objetos que se puedan insertar
For Each objShp In objSld.Shapes

'si la forma es un cuadro de texto
If objShp.HasTextFrame Then

'si la forma cuadro de texto tiene texto'
If objShp.TextFrame.HasText Then

'reemplazar el texto"<Huesped>" del cuadro de texto por lo que contiene la variable strHuesped y asi sucesivamente
objShp.TextFrame.TextRange.Replace "<Huesped>", strHuesped
objShp.TextFrame.TextRange.Replace "<In>", strIn
'objShp.TextFrame.TextRange.Replace "<Ref>", strReferencia
'objShp.TextFrame.TextRange.Replace "<Fecha>", strFecha
objPlan.Save
' ActivePresentation.ExportAsFixedFormat objPlan.Path & "\" & "Plan Nutricional" & strHuesped & ".pdf", ppFixedFormatTypePDF:=2

'Exportar el archivo como pdf
'Declaramos el directorio
objPres.ExportAsFixedFormat objPlan.Path & "\" & "Plan Nutricional" & strHuesped & ".pdf", ppFixedFormatTypePDF, ppFixedFormatIntentScreen

End If
End If


Next




'con esta instruccion nos aseguramos de pasar a la siguiente fila de la hoja de excel'
filaInicial = filaInicial + 1

Loop


'ahora borramos la diapositiva que nos sirvio como plantilla'

'objPlan.slides(1).Delete


'guardamos los cambio que se hicieron en la diapositiva "Plan Nutricional COMBINADO.pptx'
objPlan.Save
objPlan.Close

End Sub
 

Héctor Miguel

Well-known member
me tira error de compilcacion con ppFixedFormatTypePDF y dice que no se ha definido la variable
a simple vista (y sin contar con tus mismos elementos ?), te recomendaria cambiar la parte que no funciona:
' ActivePresentation.ExportAsFixedFormat objPlan.Path & "\" & "Plan Nutricional" & strHuesped & ".pdf", ppFixedFormatTypePDF:=2
por algo como esto:
Código:
objPPT.ActivePresentation.ExportAsFixedFormat objPlan.Path & "\" & "Plan Nutricional" & strHuesped & ".pdf", ppFixedFormatTypePDF:=2
 

nightowl

New member
Héctor gracias con tu respuesta, limpie un poco el codigo sacando algunos comentarios que traje del archivo original y le deje solo con lo que usa. Reemplace la linea de codigo que me propusiste y me vuelve a tirar otro error, en este caso: Error 448 en tiempor de ejecucion, No se encontro el argumento con nombre.

y si reemplazo tu linea por una que en lugar de tener objPPT tenga objPlan..... el error es: Error 438, el objeto no adminte esta propiedad p metodo.

En resumen lo que estoy tratando de hacer es partiendo de una hoja de excel, poder hacer una especie de combinar correspondencia en un power point, completando campos de la presentacion. y con cada nuevo registro hacer una exportacion de esta presentacion a PDF. Me hace los cambios en la presentacion, crea el nuevo documento PPT pero estoy trancado al momento de exportar el archivo

Option Explicit
Sub Combinar()
'Declaramos a shtDatos como una hoja de calculo
Dim shtDatos As Worksheet

'Declaramos las variables que seria las columnas del excel
Dim strHuesped As String
Dim strIn As Date
Dim filaInicial As Long


'Creamos nuestras variables de tipo objeto
'objppt: Prepara archivo ppt, objPlan crea un nuevo archivo ppt, objsld crea las diapositivas, objshp alamcena los objetos de tipo cuadro de texto'
Dim objPPT As Object
Dim objPlan As Object
Dim objSld As Object
Dim objShp As Object


'Llamamos la hoja en donde Vamos a obtener los datos y se lo asignamos al objeto shtDatos
Set shtDatos = Worksheets("Datos")

Set objPPT = CreateObject("Powerpoint.Application")
objPPT.Visible = True

'Buscamos la plantilla que en este caso se llama "Plan Nutricional MODELO" la cual se encuetra en el mismo directorio que el archivo de excel'
'y se lo asignamos al objeto objPlan
Set objPlan = objPPT.presentations.Open(ThisWorkbook.Path & "\Plan Nutricional MODELO.pptx")


'una vez asignada la plantilla Informes al objeto objPlan guardamos el objeto con el nombre de Combinados.pptx
objPlan.SaveAs ThisWorkbook.Path & "\Plan Nutricional COMBINADO.pptx"

'Esta variable nos indicara donde iniciar a obtener los datos, en este caso a partir de la fila 2'
filaInicial = 2

'Creamos un ciclo, la instrucion es que, mientras en la variable filainicial y columna 1 sea diferente (<>) a campo vacio hacer los siguiente'
Do While shtDatos.Cells(filaInicial, 1) <> ""

'obtenemos el dato de la filainicial, columna 1, 2, 3, etc y se lo asignamos a la variable que corresponda
strHuesped = shtDatos.Cells(filaInicial, 1)
strIn = shtDatos.Cells(filaInicial, 2)


'buscamos la diapositiva que vamos a modificar y la asignamos al objSld
Set objSld = objPlan.slides(8)

'ahora hara un recorrido de las formas que contenga la diapositiva, de los cuadros de texto y demas tipos de objetos que se puedan insertar
For Each objShp In objSld.Shapes

'si la forma es un cuadro de texto
If objShp.HasTextFrame Then

'si la forma cuadro de texto tiene texto'
If objShp.TextFrame.HasText Then

'reemplazar el texto"<Huesped>" del cuadro de texto por lo que contiene la variable strHuesped y asi sucesivamente
objShp.TextFrame.TextRange.Replace "<Huesped>", strHuesped
objShp.TextFrame.TextRange.Replace "<In>", strIn
objPlan.Save


objPPT.ActivePresentation.ExportAsFixedFormat objPlan.Path & "\" & "Plan Nutricional" & strHuesped & ".pdf", ppFixedFormatTypePDF:=2

End If
End If


Next



'con esta instruccion nos aseguramos de pasar a la siguiente fila de la hoja de excel'
filaInicial = filaInicial + 1

Loop



'guardamos los cambio que se hicieron en la diapositiva "Plan Nutricional COMBINADO.pptx'
objPlan.Save
objPlan.Close

End Sub
 

Temas similares

Arriba