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