Februar 26, 2021, 22:23:17

Neuigkeiten:

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


Hilfe bei Code zum speichern Bericht

Begonnen von Teilzeittipper, Mai 02, 2019, 20:57:00

⏪ vorheriges - nächstes ⏩

Teilzeittipper

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



DF6GL

Mai 03, 2019, 21:20:43 #1 Letzte Bearbeitung: Mai 03, 2019, 21:25:01 von DF6GL
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...

Teilzeittipper

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







Teilzeittipper

Läuft jetzt einige Tag auf zwei PC ohne Probleme.
Vielen Dank für die Hilfe !   :)