1 1 1 1 1 1 1 1 1 1 Rating 5.00 (3 Votes)

Problemstellung:

Für 32Bit und 64Bit Office Versionen

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

Voraussetzungen:

Da es das Printer-Objekt erst ab AXP gibt, ist das Bsp erst AXP lauffähig.

 

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.

Dateien:

Für 32Bit und 64Bit Office Versionen

Änderung des Standarddruckers mittels VBA

ab AXP/02

Die Zip-Datei enthält eine Version ab AXP/02
Datum 05.02.2018
Dateigröße 38.36 KB
Download 2.193

 

Ähnliche Artikel

You have no rights to post comments

Login Form

Neueste Artikel

SQL zu VBA Konverter
26. Oktober 2018
Problemstellung: Nur für 32Bit Office Versionen Gibt es eine Möglichkeit SQL-Code einer Abfrage so zu konvertieren das der Code in VBA genutzt werden kann? Lösung: Bis Access 2010 gibt das Tool...
1.png5.png7.png6.png1.png8.png7.png
Heute183
Gestern206
Diese Woche389
Dieser Monat4810
Total1576187

  • IP: 34.237.245.80
  • Browser: Unknown
  • Version:
  • OS: Unknown

Online

2
Online

19. März 2024

Letzte Kommentare

  • Berechnen von Zeiträumen als Abfragekriterium

    elmard 02.02.2021 21:02
    1000 Dank
    für diese Datenbankanwendung! Eine sehr gute Umsetzung mit den vielen Möglichkeiten des Datums.

    Weiterlesen...

     
  • SQL zu VBA Konverter

    Tommy Admin 03.11.2019 16:33
    RE: SQL zu VBA Konverter
    Hallo Elmard, danke für die Info. :lol:

    Weiterlesen...

     
  • SQL zu VBA Konverter

    elmard 03.11.2019 14:49
    Bei SmartTools neue Version 4.0
    Dieses Tool liegt inzwischen in der Version 4 vor und läuft nun auch von A2013 und A2016 sowie im ...

    Weiterlesen...

     
  • Workshop zur Benutzung des Multi-Column TreeView Control unter MS-Access

    TommyK 27.02.2019 06:52
    Workshop
    Hallo mpegjunkie, danke für Dein Feedback. Schön das Dir Workshop weiter hilft. :D

    Weiterlesen...

     
  • Workshop zur Benutzung des Multi-Column TreeView Control unter MS-Access

    mpegjunkie 26.02.2019 20:10
    Perfekter Workshop
    Hallo Tommy, perfekter Workshop, toll und umfassend erläutert. Jetzt nutze ich diese Controls auch.

    Weiterlesen...