martes, 2 de abril de 2019

VBA: Rellenar un formulario PDF con SendKeys

En la entrada anterior del blog expliqué como completar un formulario pdf desde Excel, empleando Acrobat...
Hoy emplearemos el método SendKeys (ver aquí) para poder hacerlo usando Adobe Reader.


Este método replica las acciones del teclado sobre las diferentes aplicaciones activas en nuestro equipo... por lo que es más lento e impreciso que el expuesto en el post anterior.
A cambio es más abierto y vale para cualquier aplicación.


Tenemos nuestros datos en el rango C2:C6 dispuestos para trasladarlos al formulario PDF.

VBA: Rellenar un formulario PDF con SendKeys



Insertamos un módulo estándar, y en esta ventana de código añadiremos nuestra macro:

Sub CompletarFormularioPDF()
'Rellenar un formulario PDF 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

'asignamos valor, desde las celdas, a las variables
'que servirán para completar el formularaio PDF
Dim nombre As String, NumExp As String, ciudad As String, registro As Date, email As String
NumExp = CStr(Hoja1.Range("C2").Value)
nombre = CStr(Hoja1.Range("C3").Value)
ciudad = CStr(Hoja1.Range("C4").Value)
registro = Format(CStr(Hoja1.Range("C5").Value), "dd/mm/yyyy")
email = CStr(Hoja1.Range("C6").Value)

'Generamos la ruta de los pdf guardados
stRutaGuardadoPDF = stRutaPDF & nombre & ".pdf"
'comprobamos si existe el fichero destino... y si existe lo eliminamos!!
If Dir(stRutaGuardadoPDF) <> Empty Then Kill (stRutaGuardadoPDF)

'abrimos el formulario PDF
ThisWorkbook.FollowHyperlink stRutaCompletaPDF

'y comenzamos a movermos empleando las teclas y métodos abreviados
Application.SendKeys "{Tab}", True      'nos desplazamos por el formulario TABulando
Application.SendKeys nombre, True       'rellenamos el nombre en el primer campo de Nombre
Application.Wait Now + TimeSerial(0, 0, 1) 'damos tiempo para rellenar el campo

Application.SendKeys "{Tab}", True      'nos desplazamos por el formulario TABulando
Application.SendKeys email, True       'rellenamos el nombre en el campo de Email
Application.Wait Now + TimeSerial(0, 0, 1) 'damos tiempo para rellenar el campo

Application.SendKeys "{Tab}", True      'nos desplazamos por el formulario TABulando
Application.SendKeys registro, True       'rellenamos el nombre en el campo de Fecha registro
Application.Wait Now + TimeSerial(0, 0, 1) 'damos tiempo para rellenar el campo

Application.SendKeys "{Tab}", True      'nos desplazamos por el formulario TABulando
Application.SendKeys NumExp, True       'rellenamos el nombre en el campo de Núm expediente
Application.Wait Now + TimeSerial(0, 0, 1) 'damos tiempo para rellenar el campo

Application.SendKeys "{Tab}", True      'nos desplazamos por el formulario TABulando
Application.SendKeys ciudad, True       'rellenamos el nombre en el campo de Ciudad origen
Application.Wait Now + TimeSerial(0, 0, 1) 'damos tiempo para rellenar el campo

'una vez completado el formulario lo guardaremos....
'pero como se ha abierto desde Reader usaremos la opción de 'guardar como'
'desde la opción de imprimir (Ctrl+P)
Application.SendKeys "^(p)", True   'presionamos Ctrl+P
Application.Wait Now + TimeSerial(0, 0, 3) 'damos tiempo para abrir la ventana diálogo

'en las opciones de elección de impresora
Application.SendKeys "{UP}", True   'presionamos flecha arriba
Application.SendKeys "{UP}", True   'presionamos flecha arriba.. hasta llegar a impresión 'AdobePDF'

Application.SendKeys "{Enter}", True
Application.Wait Now + TimeSerial(0, 0, 2) 'damos tiempo para abrir la ventana diálogo

Application.SendKeys "%(m)", True   'presionamos Alt+M para escribir el nombre del ficheor
Application.Wait Now + TimeSerial(0, 0, 2) 'damos tiempo para abrir la ventana diálogo
Application.SendKeys stRutaGuardadoPDF      'añadimos la ruta y nombre del fichero nuevo...
Application.Wait Now + TimeSerial(0, 0, 2)

Application.SendKeys "%(g)", True   'presionamos Alt+G para guardar
Application.Wait Now + TimeSerial(0, 0, 2)

'y acabamos cerrado el pdf y la aplicación
Application.SendKeys "^(q)", True   'presionamos Ctrl+Q para salir
'
Application.SendKeys "%(n)", True   'presionamos Alt+N para NO guardar cambios

'y restauramos el bloqueo numérico (por razones poco claras se desactiva...)
Application.SendKeys "{NUMLOCK}", True

'mensaje final
MsgBox "Proceso finalizado"
End Sub



Si ejecutamos la macro veremos paso a paso como se van rellenando los campos, abriendo las ventanas diálogo y ejecutando las diferentes acciones...

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.