Drucken aus Access unter Windows 10
Hallo zusammen,
ich habe gerade etwas Diskussionen mit dem Entwickler einer Access2013 DB.
Die Drucker werden als TCP-IP Drucker installiert. Es handelt sich um Brother, wie auch Kyocera Drucker.
Es geht darum diverse Formulare unterschiedlich zu drucken.
Als Beispiel soll Formular 1 auf Drucker 1 aus unterschiedlichen Fächern gedruckt werden. Teilweise Duplex. Formular 2 dann nur aus Fach 2 ... usw.
Unter Windows7 wurde das bis jetzt so gelöst, dass auf dem PC jeder Drucker mehrfach installiert wurde, mit unterschiedlichen Namen, wie z.B. "Drucker 1, Fach 1"; "Drucker 1, Duplex": "Drucker 1, Fach 2"; "Drucker 2, Duplex" usw. In der Konfiguration dieser Drucker wurden dann die entsprechenden Eigenschaften eingestellt. Das ergab dann über 8 verschieden installierte Drucker auf den PCs.
Nun soll das Ganze demnächst auf Windows 10 laufen.
Wir hatten bei Tests unter Windows 8.1 aber schon die Erfahrung gemacht, dass das mehrfache installieren von ein und dem gleichen Drucker mit der gleichen IP irgendwann damit endet, dass die Drucker gar nicht mehr drucken, Druckaufträge irgendwo im Nirvana verschwinden und andere Nettigkeiten. Ich befürchte unter Win10 wird dies nicht anders ablaufen.
Von daher war mein Vorschlag bzw. Idee , dass jeder physikalische Drucker nur jeweils einmal auf dem System installiert wird und aus der Access-DB die Drucker per VBA dementsprechend angesteuert werden.
Jetzt sagt aber der Entwickler nach einigen Tests, dass dies seiner Meinung nach nicht per VBA machbar wäre.
Von daher meine Frage an euch: Wie geht ihr mit sowas um ? Geht das mit VBA, oder muss zwingend mit den vielen installierten Druckern gearbeitet werden ? Oder gibt es vielleicht einen ganz anderen Weg um so etwas zu bewerkstelligen ? Es ist eine 2012er Domäne vorhanden, man könnte auch einen Server zum Printserver machen, und die "vielen" Drucker dann dort installieren und freigeben. Diese Möglichkeit hat aber unter W8.1 auch nicht sauber funktioniert, daher sind alle Clients (5 Stück) noch auf Win7 geblieben.
Danke und Grüße, Henere (der von VBA und Druckersteuerung nun mal ganz und gar keine Ahnung hat)
ich habe gerade etwas Diskussionen mit dem Entwickler einer Access2013 DB.
Die Drucker werden als TCP-IP Drucker installiert. Es handelt sich um Brother, wie auch Kyocera Drucker.
Es geht darum diverse Formulare unterschiedlich zu drucken.
Als Beispiel soll Formular 1 auf Drucker 1 aus unterschiedlichen Fächern gedruckt werden. Teilweise Duplex. Formular 2 dann nur aus Fach 2 ... usw.
Unter Windows7 wurde das bis jetzt so gelöst, dass auf dem PC jeder Drucker mehrfach installiert wurde, mit unterschiedlichen Namen, wie z.B. "Drucker 1, Fach 1"; "Drucker 1, Duplex": "Drucker 1, Fach 2"; "Drucker 2, Duplex" usw. In der Konfiguration dieser Drucker wurden dann die entsprechenden Eigenschaften eingestellt. Das ergab dann über 8 verschieden installierte Drucker auf den PCs.
Nun soll das Ganze demnächst auf Windows 10 laufen.
Wir hatten bei Tests unter Windows 8.1 aber schon die Erfahrung gemacht, dass das mehrfache installieren von ein und dem gleichen Drucker mit der gleichen IP irgendwann damit endet, dass die Drucker gar nicht mehr drucken, Druckaufträge irgendwo im Nirvana verschwinden und andere Nettigkeiten. Ich befürchte unter Win10 wird dies nicht anders ablaufen.
Von daher war mein Vorschlag bzw. Idee , dass jeder physikalische Drucker nur jeweils einmal auf dem System installiert wird und aus der Access-DB die Drucker per VBA dementsprechend angesteuert werden.
Jetzt sagt aber der Entwickler nach einigen Tests, dass dies seiner Meinung nach nicht per VBA machbar wäre.
Von daher meine Frage an euch: Wie geht ihr mit sowas um ? Geht das mit VBA, oder muss zwingend mit den vielen installierten Druckern gearbeitet werden ? Oder gibt es vielleicht einen ganz anderen Weg um so etwas zu bewerkstelligen ? Es ist eine 2012er Domäne vorhanden, man könnte auch einen Server zum Printserver machen, und die "vielen" Drucker dann dort installieren und freigeben. Diese Möglichkeit hat aber unter W8.1 auch nicht sauber funktioniert, daher sind alle Clients (5 Stück) noch auf Win7 geblieben.
Danke und Grüße, Henere (der von VBA und Druckersteuerung nun mal ganz und gar keine Ahnung hat)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 307367
Url: https://administrator.de/forum/drucken-aus-access-unter-windows-10-307367.html
Ausgedruckt am: 20.04.2025 um 15:04 Uhr
12 Kommentare
Neuester Kommentar

Das geht problemlos, zumindest bei Reports mit der PaperBin Property (Für jeden Drucker muss der entsprechende Traywert ausfindig gemacht und abgelegt werden) , bei Formularen müsste ich erst mal nachsehen.
Gruß skybird
Gruß skybird
Hi,
hier mal der aktuelle Versuch des Entwicklers:
Kommt aber leider immer aus Fach 1
Viele Grüße,
Jens
hier mal der aktuelle Versuch des Entwicklers:
'...
Set rpt = Reports(pReportName)
rpt.Printer = Application.Printers(pPrinterName)
With rpt.Printer
If pPaperBin > -1 Then .PaperBin = pPaperBin
DoCmd.OpenReport pReportName, acViewNormal
DoCmd.Close acReport, pReportName, acSaveNo
End With
Set rpt = Nothing
'...
'pPaperBin:
'https://msdn.microsoft.com/en-us/library/office/ff822005.aspx
'7;acPRBNAuto
'14;acPRBNCassette
'5;acPRBNEnvelope
'6;acPRBNEnvManual
'15;acPRBNFormSource
'11;acPRBNLargeCapacity
'10;acPRBNLargeFmt
'2;acPRBNLower
'4;acPRBNManual
'3;acPRBNMiddle
'9;acPRBNSmallFmt
'8;acPRBNTractor
'1;acPRBNUpper
Kommt aber leider immer aus Fach 1
Viele Grüße,
Jens

Die Windows-Eigenen Tray-Defintionen unterstützt leider nicht jeder Drucker(Treiber) bzw. diese wurden nicht korrekt nach MS Vorgaben im Treiber umgesetzt.
Welche Kassetten sich per Code in Windows möglicherweise setzen lassen können, kann man sich z.B. per Powershell für einen Drucker auflisten lassen:
Wird dort nur ein Tray gelistet sieht es schlecht aus.
Über die Win32API ließe sich eventuell noch was drehen. Muss ich bei Zeiten mal nachsehen.
Gruß skybird
Welche Kassetten sich per Code in Windows möglicherweise setzen lassen können, kann man sich z.B. per Powershell für einen Drucker auflisten lassen:
Add-Type -AssemblyName System.Printing
# Druckername
$printerName = "HP Laserjet 1320"
# Konstanten
$adminServer = [System.Printing.PrintSystemDesiredAccess]::AdministrateServer
$adminPrinter = [System.Printing.PrintSystemDesiredAccess]::AdministratePrinter
# Printserver-Zugriff erhalten
$server = new-object System.Printing.LocalPrintServer $adminServer
# Print-Queue des gewünschten Druckers filtern
$queues = $server.GetPrintQueues() | ?{$_.Name -eq $printerName }
foreach($q in $queues){
# Administrativen ZUgriff auf den PrintQueue erhalten
$objPrinter = new-object System.Printing.PrintQueue -argumentList $server,$q.Name,$adminPrinter
$objPrinter.GetPrintCapabilities().InputBinCapability
}
Über die Win32API ließe sich eventuell noch was drehen. Muss ich bei Zeiten mal nachsehen.
Gruß skybird

Have a look at
https://support.microsoft.com/en-us/kb/96795
https://support.microsoft.com/en-us/kb/96795

This should still work. Simply test it yourself.