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
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
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
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
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() (https://learn.microsoft.com/de-de/office/vba/api/access.docmd.outputto) durch, welcher Parameter für den Ausgabenamen zuständig ist.
Knobbi38
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
Hallo zusammen.
Erst mal vielen Dank für Eure Unterstützung.
Ich versuche gerade, Eure Vorschläge und Anmerkungen zu verstehen und tue mich aktuell ein wenig schwer dabei. Ich hoffe, ich habe mich zuvor richtig ausgedrückt ;)
Das Formular ist ja bereits geöffnet und seine Felder alle ausgefüllt. Nun soll dieses ausgefüllte Formular unter einem eindeutigen Namen - in diesem Falle für die Eindeutigkeit ein Dateiname mit Zeitstempel - als pdf abgespeichert werden (im Hintergrund) und diese pdf-Datei im gleichen Zuge als Mailanhang an den festgelegten Empfänger versendet werden. Was ich verstehe, dass die Zeile mit
ZitatDoCmd.OpenForm formName, acViewPreview, acHidden
Quatsch war, da das Formular ja bereits geöffnet ist. Diese Zeile habe ich entfernt. Trotz alledem macht die Speicherung der PDF mit eindeutigem Dateinamen weiter Schwierigkeiten, denn ich bekomme bei
DoCmd.OutputTo acOutputForm, formName, acFormatPDF immer noch die Fehlermeldung, dass er ein Objekt nicht finden kann. Das verstehe ich irgendwie logisch nicht, denn hier soll ja nichts geöffnet werden, sondern das geöffnete Formular unter diesem Namen gespeichert werden. Habe ich ein Brett vor dem Kopf?
Hallo ellinho,
wer lesen kann, ist eigentlich im Vorteil, oder? Hast du dir den Link (#4) überhaupt angeschaut und was du da für Argumente an die Methode .OutputTo() in welcher Reihenfolge übergeben musst. Allein die Fehlermeldung sollte doch schon genügend Hinweise liefern, dass der Wert von "formName" nicht stimmen kann, worauf bereits mehrfach hingewiesen worden ist.
Tip: schau dir mal den Parameter OutputFile genauer an.
Knobbi38
Zitat von: ellinho am April 17, 2026, 09:58:12die Fehlermeldung, dass er ein Objekt nicht finden kann
Ein gravierendes Problem mit deinem Code ist, dass du der Variable
formName den gewünschten Namen der PDF-Datei zuweist, aber sie dann weiter so verwendest, als wäre es der Formularname. - Aussagefähige, korrekte Namen, für alles was du selbst benennst, sind in der Programmierung essenziell um lesbaren (=verstehbaren!) und fehlerfreien Code zu schreiben. Das solltest du als Erstes korrigieren.
Dann schau dir mal die Argumente für
DoCmd.OutputTo an. In deinem ersten Posting waren die richtig
er als im letzten.
Du versuchst dann zweimal eine Email zu verschicken. Das
DoCmd.SendObject kannst du löschen, weil du dabei den Dateinamen nicht vorgeben kannst.
Der zweite Ansatz sieht für mich verdächtig aus. ->
Aussagefähige, korrekte Namen. Ob das rein technisch korrekt ist, oder nicht kann man nicht sicher sagen. Wenn es dabei Fehler gibt, solltest du die Definition von
OutMail hier posten.
Hey Leute.
Vielen Dank. Durch Eure Anmerkungen bin ich tatsächlich zum Ziel gekommen.
Allen ein schönes Wochenende. 8)
Viele Grüße
Karsten