Juni 21, 2021, 03:33:12

Neuigkeiten:

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


Druckeranweisung funktioniert nicht mehr

Begonnen von MaxP, Mai 19, 2021, 12:08:49

⏪ vorheriges - nächstes ⏩

MaxP

Hallo zusammen,

um die ständigen Druckaufgaben einfacher zu gestalten, habe ich ein kleines Formular entworfen,
über das mittels Optionsschaltflächen (varDruck) ein bzw. zwei bestimmte Drucker angesprochen werden. Ferner kann noch die Anzahl der Kopien (varAnz) bestimmt werden. Der Namen des Berichts wird beim Öffnen des Berichts in einem Feld (varRpt) gespeichert.

Der Code hat über Monate einwandfrei funktioniert, nun auf einmal nicht mehr,
ohne dass ich etwas verändert hätte.

Private Sub Befehl14_Click()

Dim varAnz As Integer
Dim varDruck As Integer
Dim varRpt As String

varAnz = Me!AnzDr
varDruck = Me!Druck
varRpt = Forms!Formularmaske!AktBericht

DoCmd.SelectObject acReport, varRpt

Select Case varDruck
    Case 1
    Application.Printer = Application.Printers("Samsung CLX-92x1 Farbe")
    DoCmd.PrintOut acPrintAll, , , , varAnz
   
    Case 2
    Application.Printer = Application.Printers("Samsung CLX-92x1 SW")
    DoCmd.PrintOut acPrintAll, , , , varAnz
   
    Case 3
    Application.Printer = Application.Printers("Samsung CLX-92x1 Farbe")
    DoCmd.PrintOut acPrintAll, , , , varAnz
    Application.Printer = Application.Printers("Brother HL-1110 an Fritzbox")
    DoCmd.PrintOut acPrintAll
   
    Case 4
    Application.Printer = Application.Printers("Brother HL-1110 an Fritzbox")
    DoCmd.PrintOut acPrintAll, , , , varAnz
   
    Case 5
    Application.Printer = Application.Printers("FRITZfax Drucker")
    DoCmd.PrintOut acPrintAll, , , , varAnz
    Application.Printer = Application.Printers("Brother HL-1110 an Fritzbox")
    DoCmd.PrintOut acPrintAll
   
End Select

End Sub

Es gibt keine Fehlermeldung. Der Bericht wird über den Standard-Druckertreiber gedruckt und nicht über den im Code angegebenen. Die Variablen werden alle korrekt ausgelesen.

Wo kann das Problem liegen?

Gruß
Max
Win 10 pro 64 bit, Access 2003

PhilS

Zitat von: MaxP am Mai 19, 2021, 12:08:49Der Bericht wird über den Standard-Druckertreiber gedruckt und nicht über den im Code angegebenen. Die Variablen werden alle korrekt ausgelesen.
Hast du dem/den betroffenen Bericht(en) direkt fest einen Drucker zugewiesen? Der Report.Printer hat meines Wissens Priorität über dem Application.Printer.
Access DevTools - Find and Replace
Komfortables Suchen und Ersetzen in den Entwurfseigenschaften von Access-Objekten. In Abfragen, Formularen, Berichten und VBA-Code - Überall und rasend schnell!

MaxP

Hallo,

Beim Öffnen des Berichts wird vor dem eigentlichen Druck per Code ein PDF erzeugt:

Reports![SV-Ortstermin-1].Printer = Application.Printers("PDFvonACC")

Aber wie gesagt, dass hat mal funktioniert.

Gruß
Max
Win 10 pro 64 bit, Access 2003

MaxP

Deine Annahme "Der Report.Printer hat meines Wissens Priorität über dem Application.Printer" dürfte richtig sein.

Nein, unter SEITE EINRICHTEN bei den Berichten ist STANDARDDRUCKER ausgewählt.

Nach der Anweisung: Reports![SV-Ortstermin-1].Printer = Application.Printers("PDFvonACC") wird per VBA der Bericht geöffnet. Dann ist unter SEITE EINRICHTEN immer der SPEZIELLE DRUCKER gesetzt und die Druck-Funktion über VBA funktioniert nicht mehr. Denn es wird dann ausschließlich der Drucker benutzt, der unter SPEZIELLER DRUCKER aufgeführt ist.

Ändere ich dieses händisch, funktioniert der Druck-Befehl, allerdings unzuverlässig. Warum weiß ich nicht. Passiert gelegentlich, dass wieder ein WEchsel des Druckers ungewollt stattfindet.

Auch die Codes:
DoCmd.SelectObject acReport, varRpt
'oder
DoCmd.OpenReport varRpt, acViewPreview, , , acHidden
scheinen von Standard- auf spezielle Drucker umzuschalten.

Gibt es nicht die Möglichkeit bei dem Code:
Reports![SV-Ortstermin-1].Printer = Application.Printers("PDFvonACC")den Namen des Berichts [SV-Ortstermin-1] über eine Variable anzugeben?
Denn der Code scheint besser zu funktionieren, aber der Druck-Befehl soll natürlich verschiedene Berichte drucken.

Gruß
Max
Win 10 pro 64 bit, Access 2003

PhilS

Zitat von: MaxP am Mai 21, 2021, 17:14:33Auch die Codes:
DoCmd.SelectObject acReport, varRpt
'oder
DoCmd.OpenReport varRpt, acViewPreview, , , acHidden
scheinen von Standard- auf spezielle Drucker umzuschalten.
Für SelectObject ist mir das nicht plausibel, aber wenn du "Beim Öffnen" des Berichts per VBA den Drucker änderst, dann passiert das natürlich auch bei DoCmd.OpenReport.

Zitat von: MaxP am Mai 21, 2021, 17:14:33Gibt es nicht die Möglichkeit bei dem Code:
Reports![SV-Ortstermin-1].Printer = Application.Printers("PDFvonACC")den Namen des Berichts [SV-Ortstermin-1] über eine Variable anzugeben?
Ja, natürlich:
Reports("SV-Ortstermin-1").Printer = Application.Printers("PDFvonACC")Hier kannst du dann anstelle des hartcodierten Namens auch eine Variable einsetzen.
Access DevTools - Find and Replace
Komfortables Suchen und Ersetzen in den Entwurfseigenschaften von Access-Objekten. In Abfragen, Formularen, Berichten und VBA-Code - Überall und rasend schnell!