Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1368to1372
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Vba: Pdf aus Excel befüllen Focus derExcel-Datei

Vba: Pdf aus Excel befüllen Focus derExcel-Datei
19.07.2014 12:05:05
Frank J. Müller

Hallo,
ich versuche Formulare aus Pdf-Dateien zu befüllen.
Ausgangspunkt ist dieses Script https://forums.adobe.com/thread/302309
Aber es scheint nicht zu funktionieren an der Stelle wo er versucht zum zweiten mal auf die Zellen zugreifen will.
Es kommt ein Automatisierungsfehler. Scheinbar erhält das Excel-Fenster nicht wieder den Fokus.
Hat jemand einen Tipp?
Vielen Dank!
Hier die Datei:
https://www.herber.de/bbs/user/91588.zip

Sub Pdfdings()
Dim gApp As Acrobat.CAcroApp
Dim avdoc As Acrobat.CAcroAVDoc
Dim gPDDoc As Acrobat.CAcroPDDoc
Dim DOC_FOLDER As String
Dim x As Boolean
Dim mydoc As Workbook
Set gApp = CreateObject("AcroExch.App")
Set gPDDoc = CreateObject("AcroExch.PDDoc")
Set avdoc = CreateObject("AcroExch.AVDoc")
Set mydoc = ThisWorkbook
'MsgBox Sheets("Tabelle4").Cells(1, 2).Value
DOC_FOLDER = Sheets("Tabelle4").Cells(1, 2).Value
'Hides Acrobat - So Far So Good
'gApp.Hide
Dim FormApp As AFORMAUTLib.AFormApp
Dim AcroForm As AFORMAUTLib.Fields
Dim Field As AFORMAUTLib.Field
Dim z, i, j, n As Integer
Dim wksTab1 As Worksheet
Dim Feld, Inhalt As String
Set wksTab1 = ThisWorkbook.Sheets("Tabelle2")
'Open PDF that I choose. Acrobat still has not flashed on my screen
j = 2
i = 2
While i < 3
x = avdoc.Open(DOC_FOLDER & "formular_ve01a.pdf", "temp")
'Acrobat Now Pops up on my screen. However, I get an error without this line. avdoc.Show works   _
_
the same as Maximize it seems.
avdoc.Maximize (1)
'Hides it again, right after it opens. This creates a flash
'gApp.Hide
Set FormApp = CreateObject("AFormAut.App")
While j < 39
'If the Maximize line is not there, this is where I receive error about document viewer
Feld = mydoc.Sheets("Tabelle2").Cells(1, j).Value
Inhalt = mydoc.Sheets("Tabelle2").Cells(i, j).Value
'If j > 2 Then MsgBox Feld
'MsgBox Inhalt
For Each Field In FormApp.Fields
If Field.Name = Feld Then
Field.Value = Inhalt
End If
Next
j = j + 1
Wend
Dim sDoc
Set sDoc = avdoc.GetPDDoc
saveOk = sDoc.Save(1, DOC_FOLDER & "OK_Formular" & wksTab1.Cells(1, 1).Value & ".pdf")
avdoc.Close (1)
gApp.Exit
i = i + 1
Wend
End Sub

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Vba: Pdf aus Excel befüllen Focus derExcel-Datei
20.07.2014 12:25:51
fcs
Hallo Frank,
ich kann mangels ausreichernder Lizenz für Acrobat/AcrobatReader (so jedenfals die Meldung bei mir) nicht testen.
In den Beispieldaten hast du in der Spalte "weiblich" ein Datum eingetragen. Hier müsste wahrscheinlich "on" oder "off" stehen.
Das pdf-Formular reagiert bei manueller Eingabe sehr sensibel, wenn Werte nicht im korrekten Format eingegeben werden - z.b. bei Schuljahr, Datum, Schulnummer - es erscheinen dann Hinweise.
Dies passiert wahrscheinlich auch beim Ausfüllen per Makro und endet im Automatisierungsfehler. Deswegen sollte man beim Testen von Makros nicht mit ausgeblendeten Application-Fenstern arbeiten, da man nicht auf Fehler reagieren kann.
Im Makro selber ist mir aufgefallen, dass in der Schleife die Acrobat-Anwendung verlassen/Beendet wird.
Das spielt bei dir im Moment keine Rolle, da du nur einen Datensatz ins PDF-Formular einträgst, aber nach meiner Einschätzung gehört diese Anweisung hinter das Wend.
Die Dim-Anweisung in der Schleife solltest du zu den anderen am Anfag des Makros verschieben.
Wenn schon Objektvariablen verwendet werden, dann sollten sie konsequeent verwendet werden.
Evtl. ist es besser die Text-Eigenschaft aus den Excelzellen im PDF-Formular einzutragen. Dann wird der Inhalt so übertragen, wie er in der Tabelle angezeigt wird.
Gruß
Franz
Sub Pdfdings()
Dim gApp As Acrobat.CAcroApp
Dim avdoc As Acrobat.CAcroAVDoc
Dim gPDDoc As Acrobat.CAcroPDDoc
Dim DOC_FOLDER As String
Dim x As Boolean
Dim mydoc As Workbook
Set gApp = CreateObject("AcroExch.App")
Set gPDDoc = CreateObject("AcroExch.PDDoc")
Set avdoc = CreateObject("AcroExch.AVDoc")
Set mydoc = ThisWorkbook
'MsgBox Sheets("Tabelle4").Cells(1, 2).Value
DOC_FOLDER = mydoc.Sheets("Tabelle4").Cells(1, 2).Value
'Hides Acrobat - So Far So Good
'gApp.Hide
Dim FormApp As AFORMAUTLib.AFormApp
Dim AcroForm As AFORMAUTLib.Fields
Dim Field As AFORMAUTLib.Field
Dim z, i, j, n As Integer
Dim wksTab1 As Worksheet
Dim Feld, Inhalt As String
Dim sDoc                                                'verschoben
Set wksTab1 = ThisWorkbook.Sheets("Tabelle2")
'Open PDF that I choose. Acrobat still has not flashed on my screen
j = 2
i = 2
While i < 3
x = avdoc.Open(DOC_FOLDER & "formular_ve01a.pdf", "temp")
'Acrobat Now Pops up on my screen. However, I get an error without this line. _
avdoc.Show works the same as Maximize it seems.
avdoc.Maximize (1)
'Hides it again, right after it opens. This creates a flash
'gApp.Hide
Set FormApp = CreateObject("AFormAut.App")
While j < 39
'If the Maximize line is not there, this is where I receive error about _
document viewer
Feld = wksTab1.Cells(1, j).Value     'Objekt-Variable verwendet
Inhalt = wksTab1.Cells(i, j).Value   'Objekt-Variable verwendet - evtl. .Text statt  _
.Value benutzen
'If j > 2 Then MsgBox Feld
'MsgBox Inhalt
For Each Field In FormApp.Fields
If Field.Name = Feld Then
Field.Value = Inhalt
Exit For 'beschleunigt ide Makroausführung geringfügig
End If
Next
j = j + 1
Wend
Set sDoc = avdoc.GetPDDoc
saveOk = sDoc.Save(1, DOC_FOLDER & "OK_Formular" & wksTab1.Cells(1, 1).Value & ".pdf")
avdoc.Close (1)
i = i + 1
Wend
gApp.Exit
End Sub

Anzeige
AW: Vba: Pdf aus Excel befüllen Focus derExcel-Datei
20.07.2014 12:31:50
Frank J. Müller
Hallo Franz,
vielen Dank für Deine Rückmeldungen.
Das Problem ist, dass er leider gar nicht bis zu dem Punkt kommt wo er abbricht wegen dem falschen Inhalt.
Er schafft meines Erachtens nicht den Wechsel zurück zu Excel um den zweiten Wert zu holen.
Also Anschrift - Ort - Erziehungsberechtigte.
Wenn ich mit Anschrift - Ort - Erziehungsberechtigte starte wird dieser jedoch korrekt übernommen.
Das mit dem Dokumentschließen in der Schleife rührt daher, dass er ja später mal jede Zeile in ein Formular speichern soll.
Wäre toll wenn Dir noch was auffällt woran die Übergabe scheitert.
Vielen Dank!

Anzeige
AW: Vba: Pdf aus Excel befüllen Focus derExcel-Datei
20.07.2014 17:31:24
Frank J. Müller
Hallo,
hier die Lösung, die ich mit Hilfe eines anderen Forums gefunden habe,
Nur dass niemand mehr drüber nachdenkt und falls es mal jemand sonst braucht
Hi
so geht's besser

While j < 39
'If the Maximize line is not there, this is where I receive error about document  _
viewer
Feld = wksTab1.Cells(1, j).Value
Inhalt = wksTab1.Cells(i, j).Value
FormApp.Fields(Feld).Value = Inhalt
j = j + 1
Wend

einige deiner Spalten enthalten Fehler, z.B: Spalte 'weiblich'. Hier muss als Feldname Geschlecht des Kindes stehen und als Wert weiblich
Warum aber das ursprüngliche Script so nicht funktioniert kann ich dir leider nicht sagen, kenne mich damit überhaupt nicht aus

Anzeige

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige