Hace un par de semanas un lector preguntaba por la manera de completar varios formularios guardados en pdf desde una base de datos en una hoja de cálculo...
Hoy veremos un procedimiento bastante sencillo si tenemos una versión de Adobe Acrobat (no Reader!!).
Obviamente tenemos nuestro formulario creado, a modo de ejemplo con cinco campos:
'Nombre'
'Email'
'Fecha registro'
'Ciudad origen'
y 'Núm expediente'
Tener identificado los nombres de los diferentes campos del formulario es fundamental.. ya que la macro los identificará para su cumplimentación...
Por otra parte, en la hoja de cálculo tenemos una tabla 'TblDatos' con la información a trasladar
Insertamos un módulo estándar, y en esta ventana de código añadiremos nuestra macro:
Tras ejecutar la macro sinningún error podemos comprobar cómo se han generado los distintos pdf con los datos rellenos...
Hoy veremos un procedimiento bastante sencillo si tenemos una versión de Adobe Acrobat (no Reader!!).
Obviamente tenemos nuestro formulario creado, a modo de ejemplo con cinco campos:
'Nombre'
'Email'
'Fecha registro'
'Ciudad origen'
y 'Núm expediente'
Tener identificado los nombres de los diferentes campos del formulario es fundamental.. ya que la macro los identificará para su cumplimentación...
Por otra parte, en la hoja de cálculo tenemos una tabla 'TblDatos' con la información a trasladar
Insertamos un módulo estándar, y en esta ventana de código añadiremos nuestra macro:
Sub RellenarFormularioPDF()
'OJO!! solo funciona con Adobe ACROBAT, NO con Reader !!!
'Declaramos las variables
Dim stRutaPDF As String, nombreForm As String, stRutaCompletaPDF As String
Dim stRutaGuardadoPDF As String
Dim objAcrobatApp As Object, objAcrobatAVDoc As Object, objAcrobatPDDoc As Object
Dim objJSO As Object
Application.ScreenUpdating = False
'la ruta del formulario a completar
stRutaPDF = "E:\excelforo\"
nombreForm = "FormWord_PDF.pdf"
stRutaCompletaPDF = stRutaPDF & nombreForm
'Recorremos los registros en la tabla
For Each dato In Range("TblDatos[Nombre]")
On Error Resume Next 'controlamos posibles errores al crear el objeto Acrobat o el documento pdf
'Iniciamos al aplicación Acrobat
Set objAcrobatApp = CreateObject("AcroExch.App")
'Creamos el objeto AVDoc (el documento pdf)
Set objAcrobatAVDoc = CreateObject("AcroExch.AVDoc")
'Comprobamos si el objeto Acrobat ya existiera o generase algún tipo de error...
If Err.Number <> 0 Then
MsgBox "No podemos crear el objeto Acrobat", vbCritical
'liberamos memoria antes de salir del procedimiento.
Set objAcrobatApp = Nothing: Set objAcrobatAVDoc = Nothing
Exit Sub
End If
On Error GoTo 0 'damos por acabado posibles errores
'Abrimos el pdf con el formulario a rellenar.
If objAcrobatAVDoc.Open(stRutaCompletaPDF, "") = True Then
'Declaramos el obejto PDDoc
Set objAcrobatPDDoc = objAcrobatAVDoc.GetPDDoc
'declaramos el Objeto Java Script
Set objJSO = objAcrobatPDDoc.GetJSObject
On Error Resume Next
'Comenzamos a rellenar los campos del formulario para cada registro
'recuperamos el dato de la tabla de la hoja de cálculo...
'los pasamos como texto/string para evitar fallos.
objJSO.GetField("Nombre").Value = CStr(dato.Value)
objJSO.GetField("Email").Value = CStr(dato.Offset(0, 1).Value)
objJSO.GetField("Fecha registro").Value = CStr(dato.Offset(0, 2).Value)
objJSO.GetField("Ciudad origen").Value = CStr(dato.Offset(0, 3).Value)
objJSO.GetField("Núm expediente").Value = CStr(dato.Offset(0, 4).Value)
If Err.Number <> 0 Then
'si aparece algún error, cerramos el doc sin guardar y salimos de Acrobat!!!
objAcrobatAVDoc.Close True
objAcrobatApp.Exit
'liberamos memoria y salimos
Set objJSO = Nothing
Set objAcrobatPDDoc = Nothing: Set objAcrobatAVDoc = Nothing
Set objAcrobatApp = Nothing
Exit Sub
End If
On Error GoTo 0
'Generamos la ruta de lo spdf guardados
stRutaGuardadoPDF = stRutaPDF & dato & ".pdf"
'Guardamos el formulario como pdf y un nombre personalizado
objAcrobatPDDoc.Save 1, stRutaGuardadoPDF
'cerramos el formualrio pdf sin guardar cambios
objAcrobatAVDoc.Close True
'y cerramos la aplicación (Acrobat) para finalizar
objAcrobatApp.Exit
'liberamos memoria
Set objJSO = Nothing
Set objAcrobatPDDoc = Nothing: Set objAcrobatAVDoc = Nothing: Set objAcrobatApp = Nothing
Else
MsgBox "No podemos abrir el fichero...", vbCritical, "Algo ocurre con el fichero o su ruta."
'Cerramos Acrobat
objAcrobatApp.Exit
'liberamos memoria
Set objAcrobatAVDoc = Nothing: Set objAcrobatApp = Nothing
Exit Sub
End If
Next dato
Application.ScreenUpdating = True
'mensaje final de completado.
MsgBox "Todos los formularios se han rellenado correctamente!", vbInformation, "ok... proceso acabado"
End SubTras ejecutar la macro sinningún error podemos comprobar cómo se han generado los distintos pdf con los datos rellenos...


































