Registriert seit: 25.08.2016
Version(en): Office 2010
Hallo zusammen,
zur Situation:
Ich habe ein ausfüllbares PDF Dokument, in das ich die gleichen Daten eintragen muss, wie zuvor auch in meine Exceltabelle. Nun habe ich die Überlegung einen Button o.Ä. in Excel einzufügen, sodass die Daten aus dieser jeweiligen angezeigten Zeile (über Filter) direkt in das ausfüllbare PDF-Dokument übernommen werden. So würde ich mir jedes mal die doppelte Schreibarbeit sparen. Geht so etwas überhaupt?
Vielen Dank im Voraus schon einmal und viele Grüße
Steffen
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Steffen,
möglich ist viel, aber nicht alles ist sinnvoll, geht nicht ohne Risiko und ist nur mit einigem Aufwand umzusetzen.
Die einfache Seite der Aufgabe ist, in Excel etwas zu kopieren.
Dann muss die pdf-Anwendung in den Vordergrund gebracht werden und mit SendKeys muss man versuchen, das richtige Feld zu treffen, dann das Menü der pdf-Anwendung aufrufen und den Menüeintrag "Einfügen" auswählen, sofern es den im Formular gibt. Für beides muss ein Softkey vorhanden sein, sonst geht es nicht ... Dann braucht man günstigerweise eine identische Softwareausstattung auf dem Entwicklungsrechner, gleiche Einstellungen des Readers, und etwas Zeit, bis die Sache mit den SendKeys funktioniert und vor allem die Einträge auch an der richtigen Stelle sitzen. Allerdings mit dem Risiko, wenn sich am Formular, auf dem Anwendungsrechner oder bei den Einstellungen was ändert, das es wieder nicht geht ...
Also, nach dem "einfachen" Kopieren ist es wohl einfacher und sicherer, die Daten dann auch per STRG+v einzufügen (und nicht doppelt zu schreiben) ...
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo André, es geht wahrscheinlich immer noch um das hier. Gruß Uwe
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Uwe,
danke für den Hinweis. Mit dem Adobe Acrobat lässt sich dann die Datenübergabe wohl ohne SendKeys programmieren. Allerdings beißen sich im Beitrag #3 die beiden Sätze:
"Ich hatte es schon soweit, dass ich bestimmte Spalten-Werte übertragen konnte" ... "Wenn ich es starte, öffnet sich auch die PDF, allerdings ohne eingetragenen Werte. "
Im dort geposteten Code kann ich keine Übertragung feststellen. Wäre schön, wenn man den Code hätte, wo die Übertragung bestimmter Spaltenwerte gelungen ist. Ich hätte auch erst mal nichts anderes vorgeschlagen als Du. Da ich aber keinen AdobeAcrobat habe, muss ich mich auch mehr oder weniger zurückhalten.
Eins hätt' ich noch. Eventuell hilft statt fieldObj = rngZ.Cells(4).Value dann fieldObj.Value = rngZ.Cells(4).Value
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo André,
Du sagst es. Ich kam mir schon bisschen veralbert vor. Und den AdobeAcrobat hab ich auch nicht.
Gruß Uwe
Registriert seit: 25.08.2016
Version(en): Office 2010
Hallo André, auch dir herzlichen Dank fürs antworten! Also der Code, der bei mir einzelne Zellen in das ausfüllbare PDF einträgt lautet so: Zitat:Sub test1() Dim pdfPath As String Dim TestVal As String 'Dim pdDoc As Acrobat.CAcroPDDoc 'Dim avDoc As Acrobat.CAcroAVDoc 'Dim acroApp As Acrobat.CAcroApp Dim pdDoc As Object Dim avDoc As Object Dim acroApp As Object Dim jsObj As Object Dim fieldObj As Object
' hier liegt die Test Datei pdfPath = "C:\file\.pdf" Set acroApp = CreateObject("AcroExch.App") Set avDoc = CreateObject("AcroExch.avDoc") acroApp.Show ' doc öffnen If avDoc.Open(pdfPath, "Name_Dokument") Then Set pdDoc = avDoc.GetPDDoc() Set jsObj = pdDoc.GetJSObject() ' Zugriff auf das Feld Set fieldObj = jsObj.getField("PDF_Feld") ' ... und wert setzen TestVal = Worksheets("Tabelle1").Range("A2").Value fieldObj.Value = TestVal ' aufräumen Set fieldObj = Nothing Set pdDoc = Nothing End If Set avDoc = Nothing Set acroApp = Nothing End Sub Ich habe die PDF-Felder mit Adobe Acrobat benannt, sodass ich weiß, wie ich welches Feld anzusprechen habe. Wenn ich nun aber hinter '...und wert setzen die varianten eingebe, die gefilterten Spaltenwerte zu übertragen, öffnet sich ausschließlich die PDF nach dem Buttondruck, aber ohne ausgefülltes Feld. Viele Grüße Steffen
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Steffen, wie gesagt, ich hab keinen AdobeAcrobat Wie ist denn der genaue Ablauf? Ist denn am Ende des Makros überhaupt noch ein pdf offen? Ich wäre jetzt erst mal der Ansicht, dass da nix von pdf offen sein dürfte. Ich sehe im Code aber auch nicht, wie die Änderung gespeichert wird. Im Prinzip PDDoc.Save Parameter, Pfad & DateiName Für die möglichen Parameter hab ich irgendwo das gefunden. Du kannst im Programm den benötigten Parameter-Ausdruck oder die Zahl verwenden - das Ganze ENUM... muss nicht sein. Code: 'Constants for PDDoc save flags. Public Enum PDSaveFlags 'Write changes only. PDSaveIncremental = 0 '&H0 'Write the entire file. PDSaveFull = 1 '&H1 'Write a copy of the file into the file. PDSaveCopy = 2 '&H2 'Save the file in a linearized fashion. PDSaveLinearized = 4 '&H4 'Writes a PostScript header as part of the saved file. PDSaveWithPSHeader = 8 '&H8 'Specifies that it's OK to store in binary file. PDSaveBinaryOK = 16 '&H10 'Remove unreferenced objects, often reducing file size. PDSaveCollectGarbage = 32 '&H20 End Enum
Wenn Du die Zahlen als Parameter nimmst, kannst Du sie einzeln verwenden oder auch kombinieren. Ich denke, für Deine Ausgabe könnte einer der ersten 3 Parameter passen, es reicht also z.B. PDDoc.Save PDSaveCopy, "C:\file\ausgefüllt.pdf"
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 25.08.2016
Version(en): Office 2010
Danke für die Antwort :)
also momentan ist es so, dass das PDF einfach auf bleibt nachdem ich den Button gedrückt habe. Die Daten sind auch eingetragen, jedenfalls dann, wenn ich es so mache, wie im letzten Post geschrieben. So wie du schreibst, würde sie ja direkt gespeichert werden. Bei mir ist sie offen, und wenn ich sie schließe kommt die Frage, ob ich speichern will.
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Steffen,
da könntest Du mal folgendes versuchen: 'gleich nach dem Speichern pdDoc.Close avdDoc.Close (True) acroApp.Exit
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 25.08.2016
Version(en): Office 2010
Hi, danke noch einmal für deine Antwort. Also beim Speichern habe ich ja momentan keine Probleme, eher bei der Übertragung der Zellenwerte einer gefilterten Zeile. Da ich erst heute wieder bei der Arbeit war, konnte ich gerade eben noch einmal nachsehen, wie weit der Code mittlerweile war: Zitat:Sub test_pdf() Dim pdfPath As String Dim TestVal As String Dim oWs As Worksheet Dim rngF As Range, rngZ As Range 'Dim pdDoc As Acrobat.CAcroPDDoc 'Dim avDoc As Acrobat.CAcroAVDoc 'Dim acroApp As Acrobat.CAcroApp Dim pdDoc As Object Dim avDoc As Object Dim acroApp As Object Dim jsObj As Object Dim fieldObj As Object ' hier liegt die Test Datei pdfPath = "C:\Users\test.pdf" Set acroApp = CreateObject("AcroExch.App") Set avDoc = CreateObject("AcroExch.avDoc") acroApp.Show ' doc öffnen If avDoc.Open(pdfPath, "PDF_erstellen") Then Set pdDoc = avDoc.GetPDDoc() Set jsObj = pdDoc.GetJSObject() ' Zugriff auf das Feld Set fieldObj = jsObj.getField("PDF-Zelle") ' ... und wert setzen Set oWs = Worksheets("Tabelle1") If oWs.AutoFilterMode Then Set rngF = oWs.AutoFilter.Range With rngF.SpecialCells(xlCellTypeVisible) If .Rows.Count > 1 Or .Areas.Count > 1 Then Set rngZ = rngF.Resize(rngF.Rows.Count - 1).Offset(1) Set rngZ = rngZ.SpecialCells(xlCellTypeVisible).Rows(1) fieldObj = rngZ.Cells(1).Value End If End With End If ' aufräumen Set fieldObj = Nothing Set pdDoc = Nothing End If Set avDoc = Nothing Set acroApp = Nothing End Sub momentan ist es so, dass er die Zeile: fieldObj = rngZ.Cells(1).Value debuggen will, auch, wenn ich die Zeile so umformuliere, wie du es vorgeschlagen hast, also : fieldObj.Value = rngZ.Cells(1).ValueSeltsam ist allerdings, dass wenn ich meinen Button zur Erstellung der PDF drücke, die gewünschte PDF geöffnet wird, mir aber von Excel im gleichen Atemzug gesagt wird, dass diese Zeile fehlerhaft ist.Nur leider wird die PDF dann dementsprechend ohne die gewünschten, gefilterten Werte eingetragen. Also, falls du/ ihr noch mehr Tipps habt, immer gerne her damit, ich bin froh über sämtliche Unterstützung.Liebe GrüßeSteffen
|