Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA in PDF

VBA in PDF
PeTeR
Hallo VBA-Freaks,
ich würde gerne folgenden Prozess programmieren:
1) Excel-Daten als xml speichern
2) Pdf-Vorlage öffnen und Daten aus 1) in Vorlage importieren
3) Pdf speichern
Kann man überhaupt pdf aus Excel "fernsteuern"? Gibt es dafür eine Objektbibliothek und einen entsprechenden Verweis?
Vielen Dank für eure Hilfe!!!
PeTeR
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA in PDF
12.07.2010 11:27:07
Ramses
Hallo
"...1) Excel-Daten als xml speichern .."
Datei - Speichern Unter- XML-Format.
Sollte also kein Problem sein
"...2) Pdf-Vorlage öffnen und Daten aus 1) in Vorlage importieren..."
Warum schreibst du die Daten nicht gleich aus der XLS in die PDF Datei ?
Wozu der Umweg über die XML
"...3) Pdf speichern..."
Welches PDF ?
Es gibt zig-verschiedene Varianten von PDF Generatore, aber nicht alle unterstützen zuverlässig die Formularfelder, einige gar nicht.
Mit dem PDF Generator von Office geht das aber überhaupt nicht. Dazu brauchst du ein PDF Programm, das eben diese Funktionen unterstützt und dann "ferngesteuert" werden muss als Object.
Vorzugsweise Adobe PDF. Damit werden die Formularfelder nach meiner Erfahrung am Besten und sichersten ausgefüllt.
"...Kann man überhaupt pdf aus Excel "fernsteuern"? .."
Ja
"...Gibt es dafür eine Objektbibliothek und einen entsprechenden Verweis..."
Ja, aber nur wenn du ein entsprechendes PDF Programm installiert hast.
Am Besten googelst du mal nach VBA, Excel und PDF oder schaust mal in den einschlägigen Addobe Foren vorbei.
Gruss Rainer
Anzeige
AW: VBA in PDF
12.07.2010 15:07:47
PeTeR
Hallo Ramses,
schön, wieder von dir zu hören und ganz herzlichen Dank für deine Antwort.
Ich finde in den Verweisen: Adobe Acrobat 8.0 Type Library
Kann ich damit den Adobe Acrobat "fernsteuern"?
Wie könne ich Daten aus xlsx direkt in eine PDF-Vorlage schreiben?
Vielen Dank für deine Hilfe
PeTeR
Anzeige
AW: VBA in PDF
12.07.2010 22:08:13
Ramses
Hallo
Das ist ein Beispiel aus meinem Fundus.
Benutzt oder getestet habe ich das aber auch noch nicht, weil ich das noch nicht brauchte
Sub InsertFormCaptures()
    '---------------------- Start module ------
    'I Get It! Development provides programming examples
    'for illustration only, without warranty either
    'expressed or implied, including, but not limited to,
    'the implied warranties of merchantability and/or
    'fitness for a particular purpose. This article
    'assumes that you are familiar with the programming
    'language being demonstrated and the tools used to
    'create and debug procedures. These examples assume that
    'you have licensed copies of all relevant software installed
    'on the machine upon which the examples will be run.
    
    'This routine takes preexisting .jpg files (Run CreateScreenShots first)
    'and adds them to a preexisting CodeFile.pdf file (print to PDF from VB Editor)
    'The routine assumes that all files are in C:\Documentation. Please
    'change this in the following code or create the folder.
    'Remember to set a reference to Adobe Acrobat Type Library in
    'Tools > References in the VB Editor
    '------ Written by Theo Callahan 4/2003 -------------
    
    Const DOC_FOLDER As String = "C:\Documentation"
    
    Dim objCurrent As AccessObject
    Dim frmCurrent As Form
    Dim strFormName As String
    Dim blnNeedToClose As Boolean
    
    Dim Acroapp As CAcroApp
    Dim avCodeFile As CAcroAVDoc
    Dim avFormCapture As CAcroAVDoc
    Dim pdCodeFile As CAcroPDDoc
    Dim pdFormCapture As CAcroPDDoc
    Dim lngPage As Long
    Dim AVPage As CAcroAVPageView
    Dim PDPage As CAcroPDPage
    
    'Start Acrobat in the background
    Set Acroapp = CreateObject("AcroExch.App")
    
    'Uncomment the following line if you want to watch the program run
    Acroapp.Show
    
    Set avCodeFile = CreateObject("AcroExch.AVDoc") 'This is the code file
    Set avFormCapture = CreateObject("AcroExch.AVDoc") 'This will be each jpg in turn
    
    'Open the already created code file
    avCodeFile.Open DOC_FOLDER & "\CodeFile.pdf", "Code File"
    Set pdCodeFile = avCodeFile.GetPDDoc
    
    'Loop through each form. We have to use the AllForms collection because Forms
    'only shows open forms. In order to document all of them, we loop through
    'the AllForms collection and open forms as needed. They have to be open for
    'us to check whether or not they have modules(associated code)
    
    For Each objCurrent In CurrentProject.AllForms
    
        'Open the form if it's not already open
        If Not objCurrent.IsLoaded Then
            blnNeedToClose = True 'This reminds us to close the form when done
            DoCmd.OpenForm objCurrent.name, acDesign, , , acFormPropertySettings, acWindowNormal
            Set frmCurrent = Application.Screen.ActiveForm
            strFormName = frmCurrent.name
        Else
            blnNeedToClose = False
            Set frmCurrent = Forms(objCurrent.name)
            strFormName = frmCurrent.name
        End If
    
        'Open the jpg file
        avFormCapture.Open DOC_FOLDER & "\" & strFormName & ".jpg", ""
        Set pdFormCapture = avFormCapture.GetPDDoc
    
        If frmCurrent.HasModule Then 'if there's code, look for the right spot
    
        'Look for the form name and ' - 1' in the code file: that's page 1 of code
        avCodeFile.FindText "Form_" & strFormName & " - 1", 0, 0, 1
        Set AVPage = avCodeFile.GetAVPageView
    
        'Go to the page just before the form's code
        lngPage = AVPage.GetPageNum - 1 'we want page before
        If lngPage < 0 Then lngPage = 0
    
    Else
        'If there's no code, throw the form in the back of the package
        lngPage = pdCodeFile.getnumpages - 1
    End If
    
    'Insert the jpg at the right page
    pdCodeFile.InsertPages lngPage, pdFormCapture, 0, 1, 0
    
    'Unfortunately, there is no page 0 so the first form comes AFTER the first
    'page of code if it's on page 1. We need to swap the image and code if that's the
    'case
    If lngPage = 0 Then pdCodeFile.MovePage 1, 0
    
    'Close the jpg file
    pdFormCapture.Close
    avFormCapture.Close 1
    Set pdFormCapture = Nothing
    
    'If we need to, close the form
    If blnNeedToClose Then DoCmd.Close acForm, strFormName, acSaveNo
    
    Next objCurrent
    
    'close the doc file now with form captures
    pdCodeFile.Close
    avCodeFile.Close 0
    
    'Exit Acrobat
    Acroapp.Exit
    Set objCurrent = Nothing
    Set frmCurrent = Nothing
    Set Acroapp = Nothing
    Set avCodeFile = Nothing
    Set pdCodeFile = Nothing
    Set avFormCapture = Nothing
End Sub

Aber es soll Dir mal als Ansatz dienen, wie so was geht.
Den PDF-Link habe ich noch,... als Ansatz ist das nicht schlecht
http://www.adobe.com/devnet/acrobat/pdfs/VBJavaScript.pdf
Gruss Rainer
Anzeige
AW: VBA in PDF
13.07.2010 08:42:32
PeTeR
Hallo Ramses,
vielen Dank für das Bespiel und die PDF-Datei! Damit bin ich erst einmal die nächsten Tage beschäftigt ;-)
Gruß
PeTeR
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

PDF-Integration mit VBA in Excel


Schritt-für-Schritt-Anleitung

Um Daten aus Excel in eine PDF-Vorlage zu übertragen, kannst du VBA nutzen. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Excel-Daten als XML speichern:

    • Öffne die Excel-Datei, die du als XML speichern möchtest.
    • Gehe zu DateiSpeichern unter und wähle das XML-Format aus.
  2. VBA-Referenz für Adobe Acrobat setzen:

    • Öffne den VBA-Editor mit ALT + F11.
    • Gehe zu ExtrasVerweise.
    • Aktiviere die Adobe Acrobat xx.0 Type Library, um die Funktionen von Adobe Acrobat zu nutzen.
  3. VBA-Code schreiben:

    • Füge den folgenden Code in ein neues Modul ein:

      Sub InsertFormCaptures()
      Dim AcroApp As Object
      Dim AVDoc As Object
      Dim PDDoc As Object
      Set AcroApp = CreateObject("AcroExch.App")
      Set AVDoc = CreateObject("AcroExch.AVDoc")
      
      ' Öffne die PDF-Vorlage
      AVDoc.Open "C:\Pfad\Zur\Vorlage.pdf", ""
      Set PDDoc = AVDoc.GetPDDoc
      
      ' Hier kannst du Daten aus Excel einfügen
      ' Beispiel: PDDoc.InsertPages 0, "C:\Pfad\Zur\Datei.xml", 0, 1, 0
      
      ' Schließe die PDF-Datei
      AVDoc.Close True
      AcroApp.Exit
      End Sub
  4. PDF speichern:

    • Du kannst die PDF anschließend speichern, indem du die entsprechenden Methoden aus der Adobe Acrobat VBA-Bibliothek verwendest.

Häufige Fehler und Lösungen

  • Fehler: "Das Programm, das dieses Objekt erstellt hat, ist AcroExch"

    • Lösung: Stelle sicher, dass die Adobe Acrobat-Bibliothek korrekt referenziert ist und dass Adobe Acrobat auf deinem Computer installiert ist.
  • Fehler: "PDF kann nicht geöffnet werden"

    • Lösung: Überprüfe, ob der Pfad zur PDF-Datei korrekt ist und die Datei nicht beschädigt ist.

Alternative Methoden

Wenn du keine Adobe Acrobat-Bibliothek verwenden möchtest, kannst du auch:

  • Microsoft Print to PDF verwenden:

    • Dies kann über das Standard-Druckdialogfeld von Excel erfolgen. Wähle einfach „Microsoft Print to PDF“ als Drucker aus.
  • Online-Tools:

    • Es gibt viele Online-Dienste, die Excel-Dateien in PDFs umwandeln können, jedoch mit weniger Flexibilität und Kontrolle über Layout und Formatierung.

Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du Daten direkt aus einer Excel-Tabelle in eine PDF-Datei übertragen kannst:

Sub ExcelToPDF()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Daten")

    ' Speichere die Excel-Tabelle als PDF
    ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\Pfad\Zur\Ausgabe.pdf"
End Sub

Mit diesem Code kannst du eine Excel-Tabelle direkt als PDF speichern, ohne eine PDF-Vorlage zu verwenden.


Tipps für Profis

  • Verwende die acrobat.acroapp-Referenz für erweiterte Funktionen in Adobe Acrobat, wenn du komplexere PDF-Verwaltung benötigst.
  • Nutze die vba pdf library für zusätzliche Funktionen, die dir bei der Automatisierung helfen können.
  • Dokumentiere deinen VBA-Code gründlich, damit du später leichter Änderungen vornehmen oder den Code anpassen kannst.

FAQ: Häufige Fragen

1. Kann ich PDF-Dateien ohne Adobe Acrobat erstellen?
Ja, du kannst Microsoft Print to PDF oder andere PDF-Drucker verwenden, um PDF-Dateien aus Excel zu erstellen.

2. Wie kann ich sicherstellen, dass meine PDF-Vorlage korrekt ausgefüllt wird?
Überprüfe die Formularfelder in der PDF-Vorlage und teste den VBA-Code gründlich, um sicherzustellen, dass die Daten korrekt übertragen werden.

3. Wo finde ich die Excel VBA Referenz für PDF?
Die Excel VBA Dokumentation für PDF findest du in den Microsoft-Dokumentationen oder in der Hilfe-Funktion des VBA-Editors.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige