Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Mailversand Formular PDF

Begonnen von ellinho, April 15, 2026, 15:54:13

⏪ vorheriges - nächstes ⏩

ellinho

Hallo zusammen.
Ich habe einen Fehler in meiner Funktion, die durch Klick auf eine Schaltfläche im Formular die ausgefüllten Daten des Formulars zum einen in eine PDF-Datei speichern und diese dann über SMTP als Mail an einen bestimmten Empfänger gesendet werden soll. Es handelt sich um Bereitschaftsberichte, die auch auf dem jeweiligen PC, auf dem sie erstellt werden, archiviert werden sollen. Darum habe ich mich auch für einen Dateinamen mit Zeitstempel entschieden, damit die Datei nicht immer überschrieben wird. Ich bekomme den Laufzeitfehler, dass der Formularname "Bereitschaft_20260415_154847.pdf" falsch geschrieben ist oder auf ein Formular verweist, das nicht vorhanden ist. Was habe ich da für einen Fehler drin? Hier der Code:

Private Sub PDF_Senden()
    Dim formName As String
    Dim pdfPath As String
    Dim emailTo As String
    Dim subject As String
    Dim body As String

    formName = "Bereitschaft_" & Format(Now(), "yyyymmdd_hhnnss") & ".pdf" ' Name Ihres Formulars mit Zeitstempel

    pdfPath = "C:\Access\Bereitschaftsberichte\" & formName & "" ' Speicherort des Formulars
   
   
   
    ' 1.Exportvorgang
   
DoCmd.OpenForm formName, acViewPreview, acHidden
DoCmd.OutputTo acOutputForm, formName, acFormatPDF, pdfPath
DoCmd.Close acForm, formName

     ' 2. E-Mail mit PDF-Anhang senden
    DoCmd.SendObject acSendForm, formName, acFormatPDF, _
                     emailTo, , , subject, body, False ' True = E-Mail anzeigen vor Versand
   
     
     

  With OutMail
    .From = "xxx@xyz.de"
    .To = "yyy@xyz.de"
    .subject = "Bereitschaftsbericht"
    .BodyPart.Charset = "iso-8859-1"
    .TextBody = "Hallo zusammen. Hiermit sende ich Ihnen meinen Bereitschaftsbericht."
    .AddAttachment formName
   
                With .Configuration.Fields
   
   
       
      .Item(Schema & "sendusing") = cdoSendUsingPort
      .Item(Schema & "smtpserver") = "mailserver.local"
      .Item(Schema & "smtpserverport") = 25
      .Item(Schema & "smtpauthenticate") = cdoAnonymous
      .Update
    End With
    .Send
  End With

  Set OutMail = Nothing   
                     
                   
End Sub

Ich hoffe, es findet jemand von euch auf die Schnelle meinen Fehler im Code.

Viele Grüße
Karsten

Bitsqueezer

Hallo,

laß mich raten... KI-generiert? :)

formName = "Bereitschaft_" & Format(Now(), "yyyymmdd_hhnnss") & ".pdf" ' Name Ihres Formulars mit Zeitstempel


DoCmd.OpenForm formName, acViewPreview, acHidden

Was sagt Dir das?

Name Ihres Formulars mit Zeitstempel
Damit war wohl offensichtlich das "PDF-Formular" gemeint und nicht das Formular, das Du mit OpenForm öffnen willst.

Gruß

Christian

Beaker s.a.

Hallo,

@Chistian
Das ist doch schon offen
Zitatdie durch Klick auf eine Schaltfläche im Formular die ausgefüllten Daten des Formulars ...

@Karsten
Vermutlich willst du aus den Daten des angezeigten DS, eine .pdf-Datei generieren. Da würde ich den Umweg über einen Bericht nehmen. In Prosa: Bericht mit Filter auf angezeigten DS öffnen (kann auch "Hidden" sein), und diesen dann als .pdf speichern (Name wie du es willst).

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Bitsqueezer

Hallo Ekkehard,

wie kommst Du darauf? Auch den Code nicht gelesen?

Und lies nochmal die Fehlermeldung:
"Formularname "Bereitschaft_20260415_154847.pdf" falsch geschrieben ist oder auf ein Formular verweist, das nicht vorhanden ist."

Gruß

Christian

Knobbi38

Hallo Karsten,

deine Logik ist hier etwas falsch. Du kannst natürlich nur etwas öffnen, was vorhanden ist. Lies dir nochmal die Beschreibung zu DoCmd.OutputTo() durch, welcher Parameter für den Ausgabenamen zuständig ist.

Knobbi38

Beaker s.a.

Hallo Christian,

Habe ich mich wohl schlecht ausgedrückt, und dachte, dass das
Zitat da Klarheit schafft. Da ist ja die Anforderung geschildert,
die der Code allerdings aus den von dir besagten Gründen nicht
erfüllt. Ich meinte natürlich nicht das Form, das er öffnen will
(aber gar nicht existiert) sondern jenes, wo es halt die
Sub"PDF_Senden" gibt.

Meine anschliessende Vermutung und die angebotene Lösung, dachte
ich, würden das auch ein wenig erklären.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)