Hallo Experten !
Ich möchte einen Access Bericht exportieren und unter dem Inhalt eines Textfelds eines Formulars speichern. Dazu gibt es zwar schon Beispiele im Netz, kenne mich aber leider nicht gut genug mit VBA aus um das bei mir zum laufen zu bringen.
Untenstehender Code wurde durch konvertieren eines Makros zu Modul erzeugt. Das Makro läuft schon länger problemlos. Nur muß ich das speichern nach dem exportieren manuell machen. Das soll automatisch gehen.
Die zwei Zeilen mit Dim string habe ich selbst aus einer anderen (funktionierenden) Funktion kopiert und eingefügt. Das ganze funktioniert auch bis man die Datenbank schließt
und wieder öffnet. Kurz nach dem öffnen stürzt die Datenbank ab.
Windows7 Access 2010
Option Compare Database
'------------------------------------------------------------
' Auftragsbestätigung_drucken
'
'------------------------------------------------------------
Function Auftragsbestätigung_drucken()
On Error GoTo Auftragsbestätigung_drucken_Err
If (IsNull(Forms![Übersicht-A]!ABKundennummer)) Then
DoCmd.GoToControl "[ABkundennummer]"
Exit Function
End If
DoCmd.OpenForm "Übersicht-A Zusatz", acNormal, "", "", acEdit, acHidden
Forms![Übersicht-A Zusatz]![Kunr-Zusatz] = Forms![Übersicht-A]!ABKundennummer
Forms![Übersicht-A]!ABnummer = Forms![Übersicht-A]!ABnummergeber
Forms![Übersicht-A Zusatz]![ABnr-Zusatz] = Forms![Übersicht-A]!ABnummer
DoCmd.OpenQuery "Auftragsbestätigung Druckdatum", acViewNormal, acEdit
DoCmd.OpenQuery "Auftragsbestätigungsnummer", acViewNormal, acEdit
DoCmd.OpenQuery "Auftragsbestätigung Ansprechpartner", acViewNormal, acEdit
DoCmd.Close acForm, "Übersicht-A"
DoCmd.OpenReport "Auftragsbestätigung Olivetti", acViewPreview, "", "", acNormal
DoCmd.SelectObject acReport, "Auftragsbestätigung Olivetti", False
Dim strDateiName As String
strDateiName = "C:\Auftragsbestätigungen\" & Forms![Übersicht-A Zusatz]![ABnr-Zusatz] & ".pdf"
DoCmd.OutputTo acOutputReport, "Auftragsbestätigung Olivetti", "PDFFormat(*.pdf)", strDateiName, False, "", , acExportQualityScreen
DoCmd.Close acForm, "Übersicht-A Zusatz"
Auftragsbestätigung_drucken_Exit:
Exit Function
Auftragsbestätigung_drucken_Err:
MsgBox Error$
Resume Auftragsbestätigung_drucken_Exit
End Function
Hallo,
da dürfte es viel überflüssigen und evtl. falschen Code geben.
Der Sinn der gesamten Codes erschließt sich mir nicht...
OpenQuery und Openform mit dessen Zuweisungen sind hier sinnlos in Bezug auf den Export.
Wenn ein Bericht als PDF exportiert werden soll und der zu verwendende Dateiname im Feld "ABnr-Zusatz" steht, dann reicht folgender Code, ausgeführt in einer Ereignisprozedur (Klick-Ereignis einer Schaltfläche "BerichtDrucken" ) im Formular "Übersicht-A Zusatz"
ZitatOption Compare Database
Option Explicit 'unbedingt immer in jedem Modulkopf angeben
'------------------------------------------------------------
' Auftragsbestätigung_drucken
'
'------------------------------------------------------------
Private Sub BerichtDrucken_Click()
Dim strDateiName As String
On Error GoTo Auftragsbestätigung_drucken_Err
If IsNull(Me![ABnr-Zusatz]) Then ' Auf Sonder- und Leerzeichen in selbst definierten Namen verzichten !
Msgbox "Dateinamen eingeben"
Me![ABnr-Zusatz]. Setfocus
Exit Sub
End If
DoCmd.OpenReport "Auftragsbestätigung Olivetti", acViewPreview
DoCmd.SelectObject acReport, "Auftragsbestätigung Olivetti", False
strDateiName = "C:\Auftragsbestätigungen\" & Me![ABnr-Zusatz] & ".pdf"
DoCmd.OutputTo acOutputReport, "Auftragsbestätigung Olivetti", "PDFFormat(*.pdf)", strDateiName, False
Auftragsbestätigung_drucken_Exit:
Exit Sub
Auftragsbestätigung_drucken_Err:
MsgBox Err.Number & ": " & Err.Description
Resume Auftragsbestätigung_drucken_Exit
End Sub
Vielleicht solltest Du noch etwas zur Openform- und Openquery-Verwendung sagen...
Hallo!
Habe "Option Explicit " in diesem und in noch einem anderen Modul eingegeben. Scheint so zu funktionieren :)
Ich werde mal ein paar Tage damit arbeiten, um sicherzustellen, daß das auch so bleibt und gebe dann noch einmal Rückmeldung.
Was ich ich mit dem Code mache:
-Das Formular [Übersicht-A] ist geöffnet. Es wird eine neue Nummer vergeben (Autowert).
-Zum ausführen des Codes wird eine Schaltfläche geklickt.
Zuerst wird geprüft, ob im Feld [Kundennummer] ein Wert eingegeben wurde, wenn nicht wird der Cursor auf dieses Feld gesetzt, damit ein Wert eingegeben wird.
-Dann wird das Formular [Übersicht-A Zusatz] geöffnet. Hilfsformular als Zwischenspeicher. (Ohne Tabelle)
Die Werte aus [Übersicht-A] werden in [Übersicht-A Zusatz] übertragen.
-Es folgen drei Abfragen, die mir die Werte in eine Tabelle aktualisieren. Diese Tabelle ist Grundlage für den Bericht, die Werte sind die Kriterien für die Datensätze, die im Bericht ausgegeben werden.
-Das Formular [Übersicht-A] wird geschlossen/gespeicht ( Nummergeber,Autowert)
-Der Bericht wird in der Seitenansicht geöffnet. Damit kann ich prüfen, ob die Datensätze enthalten sind, die ich ausgewählt hatte. (Ohne das ich den PDF-Viewer öffnen muß)
-Die nächst Zeile " DoCmd.SelectObject acReport" habe ich gelöscht. Unnötig.
-Der Bericht wird ausgegeben und mit dem Dateinamen gespeicht. Der Dateinamen kommt aus dem Feld auf dem Hilfsformular Forms![Übersicht-A Zusatz]![ABnr-Zusatz]
-Das Hilfsformular wird geschlossen
Läuft jetzt einige Tag auf zwei PC ohne Probleme.
Vielen Dank für die Hilfe ! :)