Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 4/2012.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Lernen Sie die Printer-Klasse kennen und nehmen Sie Einstellungen zum Drucken selbst vor.

Techniken

VBA, Drucken

Voraussetzungen

Access 2002 und höher

Beispieldateien

DruckerImGriff.mdb

Shortlink

www.access-im-unternehmen.de/847

Drucker im Griff

André Minhorst, Duisburg

Berichte drucken? Kein Problem: Dialoge wie die Seiteneinstellungen und der Drucken-Dialog liefern doch alles, was das Herz an Einstellungsmöglichkeiten begehrt. Aber was, wenn Sie mal per VBA eingreifen möchten - zum Beispiel, weil der Benutzer ganz einfach zwei Exemplare eines Dokuments mit einem Mausklick drucken möchte? Oder weil Sie zur Laufzeit die Anzahl der Spalten eines Berichts einstellen möchten? Dies lässt sich natürlich per VBA erledigen. Dieser Beitrag zeigt, wie es funktioniert.

Alle Drucker auflisten

Wenn auf Ihrem System mehr als ein Drucker installiert ist, was in Anbetracht der vielen gängigen virtuellen Drucker wahrscheinlich ist, möchten Sie diese zunächst auflisten.

Eine durch Semikola getrennte Liste können Sie später beispielsweise als Datensatzherkunft eines Kombinationsfeldes verwenden (s. Abb. 1). Zunächst einmal geben wir diese Liste jedoch einfach im Direktfenster aus, und zwar mit diesem Befehl:

pic001.png

Abb. 1: Auswahl von Druckern per Kombinationsfeld

Debug.Print Druckerliste

Die dazu passende Funktion Druckerliste hat folgenden Code:

Public Function Druckerliste() As String

    Dim strTemp As String

    Dim objDrucker As Printer

    Dim i As Integer

    For i = 0 To Printers.Count - 1

        Set objDrucker = Printers(i)

        strTemp = strTemp & ";" & i & ";" & objDrucker.DeviceName

    Next i

    If Len(strTemp) > 0 Then

        strTemp = Mid(strTemp, 2)

    End If

    Druckerliste = strTemp

End Function

Diese Funktion verwendet die Auflistung Printers, die für alle dem System bekannten Drucker je ein Element enthält. Um alle Drucker zu ermitteln, durchläuft die Funktion eine Schleife über alle enthaltenen Elemenge, wobei die Anzahl mit der Eigenschaft Count der Printers-Auflistung ermittelt wird. Innerhalb der Schleife wird das jeweilige Printer-Element mit der Variablen objDrucker referenziert. Der Index sowie der Druckername werden in einer durch Semikola separierten Liste erfasst, die beispielsweise so aussieht:

0;Snagit 9;1;SnagIt 8;2;PDF-XChange 3.0;3;Microsoft XPS Document Writer;4;HP Officejet 4500 G510a-f;5;Fax;6;Brother QL-570 LE;7;Adobe PDF;8;\\MACBOOKPRO\Canon Inkjet iP2600 series

Ein Printer-Objekt besitzt neben DeviceName noch einige weitere Eigenschaften. Um diese übersichtlich darzustellen, verwenden wir ein Formular.

Dieses enthält ein Kombinationsfeld zur Auswahl des Druckers, das sinnvollerweise mit der Funktion Druckerliste gefüllt wird, sowie einige Steuerelemente, welche weitere Eigenschaften des ausgewählten Printer-Objekts anzeigen.

Nach der Auswahl des Druckers soll das Formular die über das Printer-Objekt verfügbaren Daten wie in Abb. 2 anzeigen.

pic002.png

Abb. 2: Ausgabe von Druckerinformationen

Dazu soll zunächst beim Öffnen des Formulars das Kombinationsfeld cboDrucker mit dem Ergebnis der Funktion Druckerliste gefüllt werden. Außerdem soll das Kombinationsfeld direkt beim Öffnen des Formulars den ersten Eintrag der Liste anzeigen.

Schließlich sorgt ein Aufruf der Funktion DruckereigenschaftenEinlesen dafür, dass die übrigen Steuerelemente des Formulars gefüllt werden:

Private Sub Form_Load()

    Me!cboDrucker.RowSource = Druckerliste

    Me!cboDrucker = Me!cboDrucker.ItemData(0)

    DruckereigenschaftenEinlesen

End Sub

Der Code der Prozedur DruckereigenschaftenEinlesen sieht so aus:

Private Sub DruckereigenschaftenEinlesen()

    Dim objDrucker As Printer

    Set objDrucker = Printers.Item(CLng(Me!cboDrucker))

    With objDrucker

        Me!txtBottomMargin = .BottomMargin

        Me!txtLeftMargin = .LeftMargin

        Me!txtRightMargin = .RightMargin

        Me!txtTopMargin = .TopMargin

        Me!cboColorMode = .ColorMode

        Me!txtColumnSpacing = .ColumnSpacing

        Me!txtCopies = .Copies

        Me!chkDataOnly = .DataOnly

        Me!chkDefaultSize = .DefaultSize

        Me!txtDrivername = .DriverName

        Me!cboDuplex = .Duplex

        Me!cboItemLayout = .ItemLayout

        Me!txtItemsAcross = .ItemsAcross

        Me!txtItemSizeHeight = .ItemSizeHeight

        Me!txtItemSizeWidth = .ItemSizeWidth

        Me!cboOrientation = .Orientation

        Me!cboPaperBin = .PaperBin

        Me!cboPaperSize = .PaperSize

        Me!txtPort = .Port

        Me!cboPrintQuality = .PrintQuality

        Me!txtRowSpacing = .RowSpacing

    End With

End Sub

Die Prozedur ermittelt zunächst den im Kombinationsfeld cboDrucker ausgewählten Index und liest das entsprechende Printer-Objekt in die Variable objDrucker ein. Danach schreibt sie die Werte der einzelnen Variablen in die entsprechenden Steuerelemente.

Die Eigenschaften erwarten Long- und Boolean-Werte, wobei die Long-Werte teilweise mit Konstanten gefüllt werden können.

Die entsprechenden Konstantenlisten sind in der Eigenschaft Datensatzherkunft der Kombinationsfelder hinterlegt, für das Steuerelement cboOrientation beispielsweise wie folgt:

1;"acPRORPortrait";2;"acPRORLandscape"

Dadurch stehen dann die beiden Zeichenfolgen acPRORPortrait und acPRORLandscape zur Auswahl bereit.

Damit die Daten bei Auswahl eines neuen Druckers im Kombinationsfeld cboDrucker aktualisiert werden, löst dies die Prozedur Nach Aktualisierung des Kombinationsfeldes aus:

Private Sub cboDrucker_AfterUpdate()

    DruckereigenschaftenEinlesen

End Sub

Hier ist zu erwähnen, dass einige Eigenschaften erst in Zusammenhang mit dem zu druckenden Bericht mit sinnvollen Daten gefüllt werden - mehr dazu weiter unten.

Drucker auswählen

Um die Auswahl der Drucker zu erleichtern, haben wir außerdem eine Ereignisprozedur hinterlegt, die beim Betätigen der Nach oben- und der Nach unten-Taste ausgelöst wird und jeweils den nächsten beziehungsweise den vorherigen Eintrag auswählt:

Private Sub cboDrucker_KeyDown(KeyCode As Integer, Shift As Integer)

    Select Case KeyCode

        Case 38, 40

            Select Case KeyCode

                Case 38 'nach oben

                    If CLng(Me!cboDrucker) > 0 Then

                        Me!cboDrucker = Me!cboDrucker - 1

                    End If

                Case 40 'nach unten

                    If CLng(Me!cboDrucker) < Me!cboDrucker.ListCount - 1 Then

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.