Hallo,
ich habe da ein Problem bei dem ich schon viel gesucht habe, aber nicht gefunden habe.
Aus einem Bestellformular mit Unterformular übergebe ich die benötigten Informationen an den Bericht, der dann auch angezeigt wird.
In der Vorschau wird 1 Seite angezeigt.
Wenn ich jetzt aber auf den Access Drucken Button gehe, wird mir ebenfalls nur eine Seite angezeigt. Tippe ich auf drucken, dann werden alle ungefilterten Datensätze des Formulars ausgedruckt.
Das passiert nur wenn ich die Bestellung neu angelegt habe und drucken möchte. Schließe ich die Bestellung und öffne sie wieder, passiert der Fehler nicht.
Ich habe schon alles versucht, aber ich kann den Fehler nicht finden.
Habt Ihr eine Idee?
Hallo,
ZitatDas passiert nur wenn ich die Bestellung neu angelegt habe und drucken möchte
Ohne Kenntnis der genauen Vorgänge (Code), die da passieren, kann ich nur vermuten:
Der neue Datensatz wurde noch nicht gespeichert, hat also noch keine Datensatz-ID und dem Bericht wird vermutlich beim Öffnen (Openreport) ein Kriterium der Like-Operator mit einem Sternchen übergeben.
Jetzt wo Du es schreibst...
Hier mal der code.
--
Private Sub but_drucken_Click()
' Drucken auf Standarddrucker, anschliessend Forular sperren
' DoEvents
' DoCmd.RunCommand acCmdPrint
On Error Resume Next
Dim a As Integer
Dim Filter As String
Filter = Me.fld_Cust_Order_headID
Me.AllowEdits = True
DoCmd.RunCommand acCmdSaveRecord
Me.AllowEdits = False
a = MsgBox("Soll ein Ausdruck erfolgen?", vbYesNo, "Ausdruck")
If a = 6 Then
DoCmd.OpenReport "ber_Order_Customer", acViewPreview, , "fld_Cust_Order_headID = " & Filter
End If
Me.fld_Cust_Ord_Printed.Value = -1
Call sperren
Call Buchen
End Sub
---
Ich denke die Zeile
Filter = Me.fld_Cust_Order_headID
hätte ich erst hinter die Zeile
DoCmd.RunCommand acCmdSaveRecord
machen sollen.
Es macht ja keinen Sinn erst die ID abzufragen und dann den Datensatz zu speichern.
Danke für den Hinweis!
Zitat von: jogie63 am März 29, 2020, 16:04:19
Ich denke die Zeile
Filter = Me.fld_Cust_Order_headID
hätte ich erst hinter die Zeile
DoCmd.RunCommand acCmdSaveRecord
machen sollen.
Das könnte schon die Lösung sein.
Bei Gelegenheit könntest du noch den Sinn von
On Error Resume Next in deinem Code hinterfragen.
Danke für die Info.
Was mich nur wudert ist, das in der Voransicht korrekt nur eine Seite angezeigt wird. Es ist auch nicht möglich vorzublättern.
Erst wenn ich drucke, dann werden 200 Seiten an den Drucker gesendet.
Ich konnte es noch nicht nachvollziehen, aber ich habe den Eindruck das wenn ich im Einzelschrittmodus die Zeilen durcharbeite der Fahler nicht passiert.
Jetzt habe ich gerade drei Bestellungen angelegt, bei der dritten Bestellung ist der Fehler wieder vorgekommen.
Siehe Anhang. Die Nummer wurde korrrekt übergeben und es ist nur eine Seite in der Vorschau (beides gelb markiert)
Mit dem 'On Error...'
Ich spiele mit dem Gedanken eine globale Variable zu definieren. So wie ich gelesen habe verlieren sie bei einem Fehler der nicht über 'on Error...' abgearbeitet wurde den Wert.
Ja ich weiss, meine Fehlerbearbeitung lässt zu wünschen übrig (shame on me...)
Ich hab nochmal was angehängt...
Wie gesagt, das ist kein Button von mir, sondern der Button 'drucken' von Access!
Hallo,
das ist doch kein Bericht was Du da druckst.
In der Meldung steht doch Druck von Navigationsformular.
Hallo,
etwas unklar, was Du genau machst..
Du ruft den Bericht in Seiten-Voransicht auf und willst dann mit Kontextmenü/Drucken die (einzelne) Seite drucken?
Oder druckst Du das Navigationsformular?
Code (ohne Errorhandler und ohne Prüfung, ob korrekt ausgedruckt wurde):
Private Sub but_drucken_Click()
DoCmd.RunCommand acCmdSaveRecord
If MsgBox("Soll ein Ausdruck erfolgen?", vbYesNo, "Ausdruck") = vbYes Then
DoCmd.OpenReport "ber_Order_Customer", acViewPreview, , "fld_Cust_Order_headID = " & Me.fld_Cust_Order_headID
Me.fld_Cust_Ord_Printed.Value = -1
Call sperren
Call Buchen
End If
End Sub
Exakt. Ich rufe den Bericht in der Seiten Voransicht auf und er wird dann korrekt angezeigt. Mit korrekter ID und nur eine Seite.
Wenn ich jetzt über das Kontextmenu/Drucken gehe dann wird aber das Navigationsformular ausgedruckt. Und zwar ALLE Datensätze. Das sind derzeit so um die 2500.
Das verstehe ich ja nicht. Das ist kein Druckmenu von mir das ich per VBA kreiert habe, sondern es ist von Access.
Hallo,
welches Kontextmenü meinst Du ?
Das Menü das sich mit Rechtsklick öffnet ?
Du musst aufpassen, dass Du mit dem Mauszeiger beim Rechtsklick auf der Seitenvorschau des Berichts stehts.
Hallo,
vermutlich benutzt Du das falsche Menu (das im Ribbon-Band, und das ist nicht das Kontext-Menü) und mach es so, wie Klaus es sagt.
Drucke auch mal den Bericht per VBA:
DoCmd.OpenReport "ber_Order_Customer", , , "fld_Cust_Order_headID = " & Me.fld_Cust_Order_headID