TKSoft-Online

Änderung des Standarddruckers mittels VBA PDF Drucken E-Mail
( 3 Votes )
MS-Access Bsp. DB's - Bsp. Downloads DB und DB-Objekte
  
Donnerstag, den 03. Januar 2008 um 01:00 Uhr

Problemstellung:

Wie kann ich beim Berichtsdruck den Standarddrucker wechseln, ohne Druckerdialog?

Voraussetzungen:

Da es das Printer-Objekt erst ab AXP gibt, ist das Bsp nur unter AXP und A03 lauffähig.
A07 wurde nicht getestet

 

Funktionsweise:

Es werden 2 Möglichkeiten vorgestellt:

1. Einlesen allen verfügbaren Drucker und einiger Eigenschaften in eine Tabelle
2. Alle verfügbaren Drucker werden direkt in eine Kombobox eingelesen.

Das Sub "GetAllPrinters" liest alle im System verfügbaren Drucker in die Tabelle "tbl_Printers" ein.

Public Sub GetAllPrinters()
'---------------------------------------------------------------------------------------
' Procedure : GetAllPrinters
' DateTime  : 05.08.2005 15:35
' Author    : TommyK
' Purpose   : Liest alle verfügbaren Drucker in die angegebene Tabelle ein
' Inputs    : ohne
' Output    :
' Example   : GetAllPrinters
'---------------------------------------------------------------------------------------
    On Error GoTo
 GetAllPrinters_Error
    
Dim prtLoop As
 Printer
    
Dim rst As
 DAO.Recordset
    
Dim i As Integer

        i = 0
    CurrentDb.Execute ("DELETE tbl_Printers.ID FROM tbl_Printers;")
    
Set rst = CurrentDb.OpenRecordset("tbl_Printers")
    
For Each prtLoop In
 Application.Printers
        
With
 prtLoop
            rst.AddNew
            rst!ID_Index = i
            rst!DeviceName = .DeviceName
            rst!DriverName = .DriverName
            rst!Port = .Port
            rst!PaperBin = .PaperBin
            rst!PaperSize = .PaperSize
            rst!ColorMode = .ColorMode
            rst!PrintQuality = .PrintQuality
            rst!Ausrichtung = .Orientation
            rst.Update
        
End With

        i = i + 1
    
Next prtLoop

    rst.Close: 
Set rst = Nothing


    
On Error GoTo 0
    
Exit Sub


GetAllPrinters_Error:
    
Dim strErrString As String
    strErrString = "Error Information..." & vbCrLf
    strErrString = strErrString & "Error#: " & Err.Number & vbCrLf
    strErrString = strErrString & "Description: " & Err.Description
    MsgBox strErrString, vbCritical + vbOKOnly, "Error in procedure GetAllPrinters of Modul mod_Printers"
End Sub

 

Diese Methode hat den Vorteil das noch mehrere Eigenschaften der Drucker mit eingelesen werden.
Die genaue Bedeutung der Konstanten ist im Objektkatalog des Printer-Objekts nachzuschlagen.
In der Bsp-DB gehe ich nur auf die Eigenschaft "Ausrichtung" und "Anzahl der Kopien" ein.
Die 2. Möglichkeit ist das Einlesen aller Drucker, mittels AddItem-Methode in ein Kombinationsfeld, Sub "FillPrinter"

Public Sub FillPrinter(ctlPrinterkombi As ComboBox)
'---------------------------------------------------------------------------------------
' Procedure : FillPrinter
' DateTime  : 05.08.2005 15:33
' Author    : TommyK
' Purpose   : Liest alle verfügbaren Drucker in die angegebene Kombobox ein
' Inputs    : ctlPrinterkombi = Name des Kombifeldes
' Output    :
' Example   : FillPrinter Me.MeinKombo
'---------------------------------------------------------------------------------------
   On Error GoTo
 FillPrinter_Error

    ctlPrinterkombi.RowSource = ""
    
Dim prtLoop As
 Printer
    
Dim i As Integer

        i = 0
    
For Each prtLoop In Application.Printers
        
With
 prtLoop
            ctlPrinterkombi.AddItem i & ";" & .DeviceName
        
End With

        i = i + 1
    
Next prtLoop

   
On Error GoTo
 0
   
Exit Sub


FillPrinter_Error:
    
Dim strErrString As String
    strErrString = "Error Information..." & vbCrLf
    strErrString = strErrString & "Error#: " & Err.Number & vbCrLf
    strErrString = strErrString & "Description: " & Err.Description
    MsgBox strErrString, vbCritical + vbOKOnly, "Error in procedure FillPrinter of Modul mod_Printers"
End Sub

 

Da diese Sub Public ist, muss ihr das Kombifeld beim Aufruf übergeben werden.

Kommen wir nun zum eigentlichen Wechsel des Standarddruckers. Sub "ChangePrinter"

Public Sub ChangePrinter(sReportName As String, iPrtIndex As Integer, _
                         
Optional lngCopies As Long = 1, Optional lngAusrichtung As Long
 = 1)
'---------------------------------------------------------------------------------------
' Procedure : ChangePrinter
' DateTime  : 05.08.2005 15:36
' Author    : TommyK
' Purpose   : wechselt den Standarddrucker für den gewählten Bericht
' Inputs    : sReportName = Name des Berichts, iPrtIndex = Index des gewählten Druckers
'             lngCopies = Anzahl der Kopien, lngAusrichtung = 1 = Hochformat, 2 = Querformat
' Output    :
' Example   : ChangePrinter "rpt_MeinBericht", 1
'             Würde den Bericht "rpt_MeinBericht" auf dem 2. Drucker des Systems
'             mit 1 Kopie und im Hochformat ausgeben
'---------------------------------------------------------------------------------------
    Dim prtDefault As
 Printer
    
Dim prtReportPrinter As
 Printer
    
Dim prtPrinter As
 Printer

    
On Error GoTo
 ChangePrinter_Error

    
Set
 prtDefault = Application.Printer
    
Set
 prtPrinter = Application.Printers(iPrtIndex)
    Application.Printer = prtPrinter
    DoCmd.OpenReport sReportName, acViewDesign, acHidden
    
Set
 prtReportPrinter = Reports(sReportName).Printer
    
With
 Reports(sReportName).Printer
        .Copies = lngCopies
        .Orientation = lngAusrichtung
    
End With

    DoCmd.OpenReport sReportName, acViewNormal
    DoCmd.Close acReport, sReportName, acSaveNo
    
Set prtReportPrinter = Nothing
    Application.Printer = prtDefault

    
On Error GoTo 0
    
Exit Sub


ChangePrinter_Error:
    
Dim strErrString As String
    strErrString = "Error Information..." & vbCrLf
    strErrString = strErrString & "Error#: " & Err.Number & vbCrLf
    strErrString = strErrString & "Description: " & Err.Description
    MsgBox strErrString, vbCritical + vbOKOnly, "Error in procedure ChangePrinter of Modul mod_Printers"
End Sub

 

Der Sub müssen 2 Parameter übergeben werden und 2 können übergeben werden
Pflicht:
1. Name des Berichtes
2. Index des gewählten Druckers (Der Index wird bei beiden Möglichkeiten automatisch ermittelt und ist in den Kombifelden vorhanden)
Optional:
1. Anzahl der Kopien (Standardwert=1)
2. Hoch- oder Querformat (Im Tabellenbeispiel wird dieser Wert mit ausgelesen und kann über die Optionsgruppe geändert werden,
Sonst Standardwert=Hochformat.

Aufruf der Sub z.B.:

ChangePrinter "rpt_Printers", 2, 3, 2

 

würden den Bericht "rpt_Printers" auf dem 3. Drucker des System mit 3 Kopien im Querformat ausgeben.

Das Ändern des Druckers ist nur Temporär, da die Änderungen nicht gespeichert werden.

Download nur für registrierte User

Änderung des Standarddruckers mittels VBA


Änderung des Standarddruckers mittels VBA
für AXP/02-A03 , A07 nicht getestet

Die Zip-Datei enthält eine Version ab AXP/02
Diese Kategorie erfordert eine Registrierung um Daten downloaden zu können.
Sollten Sie bereits registriert sein, so melden Sie sich bitte an.




Erstellt am
Dateigröße
Downloads
02.01.2008
38.36 KB
1443

 

Downloads in dieser Kategorie

MS-Access DB- und Objekt Eigenschaften

MS-Access DB- und Objekt Eigenschaften

 Seite: 1


DatumKlicks
Total7682
Di. 222
Mo. 215
So. 203
Sa. 191
Fr. 183
Do. 174
Mi. 162
Aktualisiert ( Mittwoch, den 26. Januar 2011 um 07:38 Uhr )
 

Kommentare  

 
0 # Netpower 2009-06-02 12:09
Hallo Tommy,

habe eine Frage zum o.a. Download.
Besteht die Möglichkeit, diesenm auch mit Formularen zum Laufen zu bringen.
Z.B. Code: ChangePrinter "frm_Production", Me.cbo_Printer.Column(0), Me.txtSpinCopies
Wenn ja, welche Änderungen müssten dann vorgenommen werden?
Antworten | Antworten mit Zitat | Zitieren
 

Kommentar schreiben


Sicherheitscode
Aktualisieren

Login

Latest Comments

Latest Forum Posts

Mehr »

Download Statistik

41 Kategorien
187 Dateien
173413 Downloads