[VBA] Ausfüllen eines bestehenden PDF Formulars mittels Adobe Acrobat API

Lange stand ich vor dem Problem, mittels eines VBA Tools ein bestehendes externes PDF Formular zu befüllen.Nachdem ich lange auf die unzuverlässige Sendkeys-Methode gesetzt habe, um von Feld zu Feld zu springen und per [STRG]+[V] die gewünschten Werte einzutragen, habe ich mich durch diverse Foren gehangelt und auch einige eigene Threads eröffnet. Schlussendlich fand ich eine Möglichkeit, über die Acrobat OLE Automation eine offizielle API zu nutzen, um mittels VBA in ein PDF Formular zu schreiben.

Wie es der Name der API erahnen lässt, benötigt man die Vollversion von Adobe Acrobat, der Reader reicht für dieses Vorhaben nicht aus! Die im VBA Projekt benötigten Verweise müssten sich bei Excel 2003 und neueren Versionen automatisch erstellen. Der unten aufgeführte Code muss einfach in ein Modul des VBA Projektes eingefügt werden.

Sub PDF_Formular()

Dim Datei, Pfad, Name As String

'PDF öffnen und füllen
Set AcroApp = CreateObject("AcroExch.App")
Set AvDoc = CreateObject("AcroExch.AVDoc")

'PDF öffnen
Datei = "C:/Users/Doe.John/Desktop/PDF-Datei.pdf" 'Pfad zur Datei muss angepasst werden
Pfad = "C:/Users/Doe.John/Desktop" 'neuer Pfad, unter der die ausgefüllte Datei gespeichert wird
Name = "PDF-Datei_ausgefüllt.pdf" 'Neuer Name der PDF-Datei

If AvDoc.Open(Datei, Name) Then
 AcroApp.Show
 Set PDDoc = AvDoc.GetPDDoc()
 Set jso = PDDoc.GetJSObject

'Die Werte "HsNr", "OT" usw. müssen durch die entsprechenden Feldnamen ersetzt werden
 'Hinter ".Value = " folgt der zu übergebende Wert, zB "= ActiveSheet.Range("A1").Value" etc.
 jso.getField("HsNr").Value = String_Hausnummer
 jso.getField("OT").Value = String_Ortsteil
 jso.getField("Ort").Value = String_Ort
 jso.getField("PLZ").Value = CStr(Int_PLZ)

 'Save changes to the PDF document
 PDDoc.Save PDSaveLinearized, Pfad & Name

'Alles schließen und leeren
 PDDoc.Close
 AvDoc.Close (True)
 AcroApp.Hide
 AcroApp.Exit
 Set AcroApp = Nothing
 Set AvDoc = Nothing
 Set PDDoc = Nothing
 Set jso = Nothing
Else
 MsgBox "Dokument nicht gefunden!"
 Set AcroApp = Nothing
 Set AvDoc = Nothing
 Set PDDoc = Nothing
 Set jso = Nothing
End If
End Sub

Die Variablen, PDF-Feldnamen sowie die übergebenen Werte müssen natürlich entsprechend der eigenen Anforderungen angepasst werden. Die Zeilen 23-26 können um beliebig viele weitere Codezeilen für dementsprechend viele PDF-Formularfelder erweitert werden. Ich habe den Code unter Excel 2003 und Excel 2007 erfolgreich getestet.

Dieser Beitrag dient hauptsächlich dazu, einmal verwendeten Code für meine späteren Projekte wiederzuverwenden. Er ist quasi Teil meiner persönlichen VBA Datenbank. Ich freue mich aber auch, wenn andere anhand dieses Codes bei ihren Projekten weiter kommen!

lrsgrmbw

lrsgrmbw

lrsgrmbw, kombiniert mit den zwei Vokalen "a" und "o" vollständig Lars Grambow, ist Autor dieses Blogs. Technisch interessiert und kreativ bemüht werden hier zum Thema Design und Entwicklung Beiträge veröffentlicht.

Das könnte Dich auch interessieren …