Standarddrucker per Formular wechseln

Datenbank

Auslesen der „Printers“-Auflistung und den Wechsel des Standarddruckers demonstriert. Dazu zeigt das Formular „Standarddrucker wechseln“ der zunächst den aktuellen Standarddrucker zur Information an. Über ein Kombinationsfeld, das alle verfügbaren Drucker auflistet, kann dann der gewünschte Drucker gewählt und per Klick auf SETZEN aktiviert werden.

So funktioniert die Umschaltung

Über die Eigenschaft „Application.Printer.DeviceName“ lässt sich der jeweils gesetzte Standarddrucker auslesen. „Application.Printer“ stellt ein „Printer“-Objekt dar, das dem aktuell eingestellten Standarddrucker entspricht. Die Eigenschaft „DeviceName“ liefert dann den betreffenden Namen, so wie er beispielsweise auch im Dialog DATEI-DRUCKEN in der Liste NAME angezeigt wird.

Für die Anzeige der installierten Drucker im Kombinationsfeld lesen wir die „Printers“-Auflistung beim Öffnen des Formulars aus und fügen die einzelnen Druckernamen der Liste „clDrucker“ über die Methode „AddItem“ hinzu:

Private Sub Form_Load()
Dim prtLoop As Printer

Zunächst wird eine Objektvariable „prt-Loop“ vom Datentyp „Printer“ deklariert, die anschließend in einer „For..Each“- Schleife für den Zugriff auf die einzelnen „Printer“-Objekte in der „Printer“-Auflistung verwendet wird.

Me.txtStandard = Application.Printer.DeviceName

Hier wird der Name des aktuell gesetzten Standarddruckers über „Application.Printer“ ausgelesen und zur Information in einem Textfeld im Formular angezeigt.

Me.txtStandard = Application.Printer.DeviceName
With Me.clDrucker
For Each prtLoop In Application.Printers
.AddItem prtLoop.DeviceName
Next ‚prtLoop
End With

Für die Identifikation eines Druckers ist immer der Name aus der Eigenschaft „DeviceName“ ausschlaggebend, sodass wir diesen Namen zur Liste hinzufügen.

Me.clDrucker = Me.txtStandard

Sind alle Drucker ausgelesen, wird die Auswahl in der Liste abschließend als Vorgabe auf den aktuell eingestellten Standarddrucker eingestellt.

Ein Klick auf die Schaltfläche SETZEN aktiviert den in der Liste NEUER STANDARDDRUCKER eingestellten Drucker als Standarddrucker für Access. Die Einstellungen über Systemsteuerung / Drucker bezüglich des von Windows verwendeten Standarddruckers werden dadurch nicht geändert! Außerdem gilt diese Änderung nur für die aktuelle Sitzung! Der aktivierte Drucker kommt nur innerhalb von Access für alle Druckausgaben und für Berichte zum Einsatz, in denen über SEITE EINRICHTEN die Option STANDARDDRUCKER eingestellt wurde.

Nach einem Klick auf die Schaltfläche SETZEN wird die Ereignisprozedur „Beim Klicken“ der Schaltfläche ausgeführt:

Private Sub btnSetStd_Click()
Dim strPrinter As String
Dim prtNew As Printer

On Error Resume Next
strPrinter = Me.clDrucker
If Err <> 0 Then
Beep
Exit Sub
End If
On Error GoTo 0
Set prtNew = Printers(strPrinter) ‚Gewählten Drucker auslesen…
Set Application.Printer = prtNew ‚…und als Standard setzen
Me.txtStandard = Application.Printer.DeviceName

End Sub

„Printer“-Objekt initialisieren

Wie bereits erwähnt verweist „Application.Printer“ auf ein „Printer“-Objekt, das dem aktuell eingestellten Standarddrucker entspricht. Um einen neuen Standarddrucker zu definieren, ist es erforderlich, das aktuelle „Printer“-Objekt durch ein anderes zu ersetzen. Dazu wird ein zweites, temporäres „Printer“-Objekt, hier deklariert als „prtNew“, eingesetzt. Für dieses „Printer“-Objekt lesen wir das zum ausgewählten Drucker gehörende „Printer“-Objekt über „Set prtNew = Printers(str Printer)“ aus der „Printers“-Auflistung aus. Die Zuweisung „Set Application.Printer = prtNew“ sorgt anschließend dafür, dass Access das neue „Printer“- Objekt als Standarddrucker aktiviert.

Quick-Tipp: Alternative Schleifenkonstruktion


Alternativ zur „For..Each“-Schleife können Sie für das Auslesen der installierten Drucker über „Printers“ auch eine „normale“ Schleife mit Zählvariable einsetzen. Für die Terminierung der Schleife lesen Sie dazu die Eigenschaft „Printers.Count“ aus, die Auskunft über die Anzahl installierter Drucker gibt: Die „Printers“-Auflistung wird, wie andere Access-Auflistungen auch, über eine Indexnummer von „0“ bis „Count-1“ adressiert.

Sub Test1()
Dim intAnz As Integer,
I As Integer intAnz = Printers.Count – 1
For I = 0 To intAnz
Debug.Print Printers(I).DeviceName
Next I
End Sub