Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: trebuh am März 02, 2026, 18:53:52

Titel: Kann man mit VBA auslesen, ob ein Drucker Dublex drucken kann?
Beitrag von: trebuh am März 02, 2026, 18:53:52
Hallo Access Gemeinde.

Bei einem Projekt kann ich in einem Formular den Drucker (Kombifeld) für den Berichtsdruck auswählen.
Ebenso kann ich mittels Kombifeld einstellen, ob Einseitiger oder beidseitiger Druck erfolgen soll.

In dem Zusammenhang, kam mir jetzt der Gedanke, ob es auch die Möglichkeit gibt, mittels VBA über die "Application.Printer" Eigenschaft feststellen zu können, ob der Drucker überhaupt Duplex fähig ist.

Ich kann kann ja den Wert ".Duplex" auslesen, aber der zeigt mir ja nur den eingestellten Wert an.

Meine beiden Drucker sind ja "Dublex" fähig.

Ich denke mal, wenn ein Drucker nicht "Dublex" fähig ist, bekomme ich eine Fehlermeldung, wenn ich zu drucken des Berichtes "beidseitiger Druck" einstellen würde?

Oder kann man diese Eigenschaft irgendwie über eine Schleife ermittel (also ob acPRDPSimplex, acPRDPVertical, acPRDPHorizontal möglich ist)?

Grüßle
Titel: Re: Kann man mit VBA auslesen, ob ein Drucker Dublex drucken kann?
Beitrag von: Knobbi38 am März 02, 2026, 20:26:44
Hallo,

zumindest mit der PS kannst du das abfragen:
Get-CimInstance -ClassName Win32_Printer | Select-Object -Property Caption, CapabilityDescriptions
Allerdings sind diese Infos stark abhängig vom installierten Treiber und müssen nicht immer stimmen.
https://powershell.one/wmi/root/cimv2/win32_printer (https://powershell.one/wmi/root/cimv2/win32_printer)
Damit sollte es auch in VBA möglich sein.

Alternativ würde es auch per API gehen. Hier ein Beispiel für ein BIN-Abfrage, sollte aber auch für Duplex (DC_DUPLEX) gehen.
https://learn.microsoft.com/en-us/office/vba/access/concepts/printing/programmatically-retrieve-printer-capabilities (https://learn.microsoft.com/en-us/office/vba/access/concepts/printing/programmatically-retrieve-printer-capabilities)

Knobbi38

Nachtrag:
Der Indexwert für Duplex:
Const DC_DUPLEX = 7&
Titel: Re: Kann man mit VBA auslesen, ob ein Drucker Dublex drucken kann?
Beitrag von: trebuh am März 03, 2026, 08:17:33
Hallo Knobbi38,

danke für die Information.
Werde mich, bei Gelegenheit, mal damit beschäftigen.

Grüßle
Titel: Re: Kann man mit VBA auslesen, ob ein Drucker Dublex drucken kann?
Beitrag von: Knobbi38 am März 04, 2026, 20:28:07
Hier mal die WMI Variante:

Public Function GetDuplexPrinter() As String()
  Dim oPrinters As Object
  Dim oPrinter As Object
  Dim avntCapabilities As Variant
  Dim astrPrinter() As String
  Dim i
 
  Const cDUPLEX_PRINTING = 3&
 
  astrPrinter = Split("")
 
  Set oPrinters = GetObject("winmgmts:").InstancesOf("Win32_Printer")
 
  If oPrinters.Count > 0 Then
    For Each oPrinter In oPrinters
      avntCapabilities = oPrinter.Capabilities
     
      For i = 0 To UBound(avntCapabilities)
        If avntCapabilities(i) = cDUPLEX_PRINTING Then
          ReDim Preserve astrPrinter(UBound(astrPrinter) + 1)
          astrPrinter(UBound(astrPrinter)) = oPrinter.Name
          Exit For
        End If
      Next
    Next
  End If
 
  GetDuplexPrinter = astrPrinter
  Set oPrinter = Nothing
  Set oPrinters = Nothing
End Function

und ein Beispiel für den Aufruf:
Sub ListDuplexPrinter()
  Dim astrPrinter() As String
  Dim i As Long, n As Long
 
  astrPrinter = GetDuplexPrinter()
  n = UBound(astrPrinter)
 
  Debug.Print UBound(astrPrinter) + 1; " Duplex printer found."

  For i = 0 To UBound(astrPrinter)
    Debug.Print i, astrPrinter(i)
  Next
End Sub

Nach dem Muster lassen sich auch noch andere Eigenschaften abfragen.
Siehe:
https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/win32-printer (https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/win32-printer)

Knobbi38
Titel: Re: Kann man mit VBA auslesen, ob ein Drucker Dublex drucken kann?
Beitrag von: trebuh am März 06, 2026, 21:15:42
Hallo Knobbi38,

Merci für den Code.
Funktioniert tadellos.
So möchte ich mal programmieren können  :)

Wollte mich schon früher bedanken, aber ich hatte auf das Forum teilweise keinen zugriff.

Grüßle