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
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.
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
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
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.