Aus Daten einer Exceltabelle ein PDF erstellen und dieses an die jeweilige Emailadresse versenden

  • Excel

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Piranha.

    Aus Daten einer Exceltabelle ein PDF erstellen und dieses an die jeweilige Emailadresse versenden

    Hallo Community,

    ich bringe mir aktuell VB(A) selbst bei, entsprechend komme ich ab und an meine Grenzen.

    Folgendes Szenario:

    In einer Exceltabelle sind Personendaten hinterlegt.
    In dieser Exceldatei möchte ich, dass ich einen Button betätige, und ein Auswahlfeld erscheint, welches auf einen Ordner zugreift, und mir Vorlagen zur Auswahl gibt (dies habe ich auch hinbekommen).
    Nur, wie verknüpfe ich den Subs?

    Visual Basic-Quellcode

    1. Sub dokumentauswahl_oeffnen()
    2. Dim sPfad
    3. Dim ofilesystem As Object, ofiledir As Object, ofile As Object
    4. sPfad = Dokument.Range("B3").Value
    5. If sPfad = "" Then Exit Sub
    6. Set ofilesystem = VBA.CreateObject("scripting.filesystemobject")
    7. Set ofiledir = ofilesystem.GetFolder(sPfad)
    8. uf_Dokauswahl.lb_dokumentenauswahl.Clear
    9. For Each ofile In ofiledir.Files
    10. uf_Dokauswahl.lb_dokumentenauswahl.AddItem ofile.Name
    11. Next
    12. uf_Dokauswahl.Show
    13. End Sub
    14. Sub dokumente_erstellen()
    15. 'Bibliothek aktivieren
    16. Dim wordapp As New Word.Application
    17. Dim doc As Word.Document
    18. 'word sichtbar machen
    19. wordapp.Visible = True
    20. Set doc = wordapp.Documents.Open("C:\Users\1234\Desktop\Dokument Test.docm")
    21. doc.Bookmarks("Anrede").Range.text = Sheet3.Cells(4, 5).Value
    22. doc.Bookmarks("Vorname").Range.text = Sheet3.Cells(4, 4).Value
    23. doc.Bookmarks("Nachname").Range.text = Sheet3.Cells(4, 3).Value
    24. doc.ExportAsFixedFormat ThisWorkbook.path & "\Dokument" & Sheet3.Cells(4, 3).Value & ".pdf", wdExportFormatPDF
    25. doc.Close savechanges:=False
    26. wordapp.Quit
    27. End Sub


    Außerdem möchte ich noch eine Bedingung voranstellen.
    Es ist eine Zelle jeweils vorhanden, wo ein Ja oder Nein vorhanden ist.
    Nur bei "Ja" soll überhaupt agiert werden.

    Grüße

    *Zitat durch Code-BBCode ersetzt*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    petaod schrieb:

    ​If Range("A1").Value = "Ja" Then

    Muss da nicht das Tabellenblatt irgendwo stehen?
    Außerdem soll ja bei dem Datensatz jeweils überprüft werden, ob die jeweilige Zelle als "Ja" deklariert ist.
    Hätte an soetwas gedacht IF Range tabelle3.cells(Zeile,7).value="Ja" then...
    Kommt aber eine Fehlermeldung....

    *Zitat korrigiert*

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Piranha schrieb:

    Muss da nicht das Tabellenblatt irgendwo stehen?
    Nicht, wenn das im Codebereich des Sheet-Objekts steht.
    Und das tut es, wenn es aus dem Klick-Event aufgerufen wird.

    Piranha schrieb:


    Außerdem soll ja bei dem Datensatz jeweils überprüft werden, ob die jeweilige Zelle als "Ja" deklariert ist.
    Hätte an soetwas gedacht IF Range tabelle3.cells(Zeile,7).value="Ja" then...

    Du kannst eine Zelle in vielen Varianten definieren
    Cells(1,1), Range("A1"), Intersect(Rows(1), Columns(1)), Tabelle3.Range("A1"), Sheets("Tabelle3").Range("A1") ...
    Letztendlich bekommst du immer ein Range-Objekt zurück, dessen Value du abfragen kannst.

    Ich habe das Gefühl, du hast Mühe, das Excel-Objektmodell zu verstehen.
    Zeig mal deinen Code und erzähl, wo er platziert ist.
    Dann kriegen wir das irgendwie hin.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    *Vollzitat entfernt*

    Dies ist jeweils als Modul angelegt...

    Visual Basic-Quellcode

    1. Sub dokumente_erstellen()
    2. 'Bibliothek aktivieren
    3. Dim wordapp As New Word.Application
    4. Dim doc As Word.Document
    5. 'word sichtbar machen
    6. wordapp.Visible = True
    7. For Zeile = 4 To Sheet3.Cells(Rows.count, 4).End(xlUp).Row
    8. IF Range tabelle3.cells(Zeile,7).value="WAHR" then
    9. Set doc = wordapp.Documents.Open("C:\Users\user123\Desktop\Dokument Test.docm")
    10. doc.Bookmarks("Anrede").Range.text = Sheet3.Cells(Zeile, 5).Value & " " & "Sheet3.Cells(Zeile, 2).Value"
    11. doc.Bookmarks("Vorname").Range.text = Sheet3.Cells(Zeile, 4).Value
    12. doc.Bookmarks("Nachname").Range.text = Sheet3.Cells(Zeile, 3).Value doc.
    13. ExportAsFixedFormat ThisWorkbook.path & "\Dokument_" & Sheet3.Cells(Zeile, 3).Value & "_" & Date & ".pdf", wdExportFormatPDF, IncludeDocumentProperties:=False ' HIER WAR ROT MARKIERT
    14. doc.Close savechanges:=False
    15. Else
    16. Next Zeile
    17. wordapp.Quit
    18. End Sub


    Und auch die Metadaten (rot markiert)- funktioniert nicht so.....
    Und eigentlich war es so angedacht, dass man dies aus einem Auswahlfeld entnimmt, was ich auch hinbekommen habe.
    Nur, dass er dann genau das in dem Auswahlfeld markierte Dokument nimmt....

    Visual Basic-Quellcode

    1. Sub dokumentauswahl_oeffnen()
    2. Dim sPfadDim ofilesystem As Object, ofiledir As Object, ofile As Object sPfad = Teilnahmebescheinigung.Range("B3").Value
    3. If sPfad = "" Then Exit Sub
    4. Set ofilesystem = VBA.CreateObject("scripting.filesystemobject")
    5. Set ofiledir = ofilesystem.GetFolder(sPfad)
    6. uf_Dokauswahl.lb_dokumentenauswahl.Clear
    7. For Each ofile In ofiledir.Files
    8. uf_Dokauswahl.lb_dokumentenauswahl.AddItem ofile.Name
    9. Next uf_Dokauswahl.Show


    Natürlich gibt es auch ein entsprechendes Formular bereits, mit den entsprechenden Buttons- "Abbrechen" funktioniert super!

    *Zitate durch Code-BBCode ersetzt*

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Marcus Gräfe“ ()

    @Piranha Bitte deinen Code immer korrekt mittels Code-BBCode einfügen: [Forum] Welche BBCodes (Tags) gibt es hier im Forum zum Einfärben von Quellcodes (Syntax-Highlighting)?
    und auf Vollzitate verzichten!
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Piranha schrieb:

    For Zeile = 4 To Sheet3.Cells(Rows.count, 4).End(xlUp).Row
    IF Range tabelle3.cells(Zeile,7).value="WAHR" then
    Was nun? Wie heisst dein Sheet-Objekt? Sheet3 oder Tabelle3?

    Piranha schrieb:

    Dies ist jeweils als Modul angelegt...
    Und wie rufst du den Code auf?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Sheet3- keine Sorge, so etwas stimmt schon.
    Ich verwechsele keine Begrifflichkeiten.

    Der Code ist nun einem Button "als Makro" zugewiesen.

    Wäre halt zumindest ganz cool, wenn die Metadaten nicht mit exportiert werden.
    Entsprechend
    IncludeDocumentProperties:=False
    funktionieren würde.

    Codezeile 12 ist inzwischen verändert, habe da auch Set doc = wordapp.Documents.Open ThisWorkbook.path & "\Dokument Test.docm"
    Lustigerweise wollte er dies so auch nicht nehmen, erst nachdem ich noch "Dim thisworkbook.path as mypath" hinzugefügt hatte, funktionierte es! Weil, weiß ich nicht.