VBA Tipp: Standarddrucker auslesen und ändern

Aus DBWiki
Wechseln zu: Navigation, Suche

Anforderung

  1. Ich möchte den Namen des Windows-Standarddruckers auslesen.
  2. Ich möchte den Windows-Standarddrucker ändern.
  3. Alternativ: Ich möchte den von Access aktuell verwendeten Windows-Standarddrucker auslesen oder ändern.

Standarddrucker auslesen

Das geht mit der folgenden API-Funktion und VBA-Funktion, die in einem allgemeinen (globalen) Modul gespeichert wird.

Lösung 1

Private Declare Function GetDefaultPrinter Lib "winspool.drv" Alias "GetDefaultPrinterA" ( _
                         ByVal pszBuffer As String, _
                         ByRef pcchBuffer As Long _
                         ) As Long
 
Public Function Standarddruckername()
 
 ' Quelle: http://www.dbwiki.net/
 
 Dim strName     As String
 Dim lngZeichen  As Long
 Dim lngret      As Long
 
 lngret = GetDefaultPrinter(strName, lngZeichen)
 strName = String(lngZeichen, 0)
 lngret = GetDefaultPrinter(strName, lngZeichen)
 
 Standarddruckername = Left(strName, lngZeichen - 1)
 
End Function

Lösung 2

Private Declare Function GetProfileString Lib "kernel32" Alias "GetProfileStringA" ( _
                         ByVal lpAppName As String, _
                         ByVal lpKeyName As String, _
                         ByVal lpDefault As String, _
                         ByVal lpReturnedString As String, _
                         ByVal nSize As Long _
                         ) As Long
 
Public Function Standarddruckername() As String
 
 ' Quelle: http://www.dbwiki.net/
 
 Dim strTemp As String
 Dim lngGerät As Long
 
 strTemp = String(1024, 0)
 lngGerät = GetProfileString("windows", "device", 0&, strTemp, 1024)
 
 Standarddruckername = Left(strTemp, InStr(strTemp, ",") - 1)
 
End Function

Standarddrucker ändern

Das geht mit der folgenden API-Funktion und VBA-Funktion, die in einem allgemeinen (globalen) Modul gespeichert wird.

Private Declare Function SetDefaultPrinter Lib "winspool.drv" Alias "SetDefaultPrinterA" ( _
                         ByVal pszPrinter As String _
                         ) As Long
 
Public Function StandarddruckerÄndern(ByVal Druckername As String) As Boolean
 
 ' Quelle: http://www.dbwiki.net/
 
 StandarddruckerÄndern = CBool(SetDefaultPrinter(Druckername & vbNullChar))
 
End Function

Aufruf

Standarddrucker auslesen

MsgBox Standarddruckername

Standarddrucker ändern

Call StandarddruckerÄndern("NeuerDruckername")


Standarddrucker ändern mit Rückmeldung:

 If StandarddruckerÄndern("NeuerDruckername") = True Then
   MsgBox "Die Änderung war erfolgreich."
 Else
   MsgBox "Die Änderung war nicht erfolgreich."
 End If


Standarddrucker auslesen oder ändern, der aktuell in Access verwendet wird

  • Ab Access XP kann auch der Standarddrucker, der innerhalb der Access-Datenbank verwendet wird, ausgelesen bzw. geändert werden.
  • Beim Schließen der Datenbank wird eine eventuelle Änderung des Standarddruckers wieder verworfen.
  • Der Standarddrucker in Windows bleibt nach einer Änderung des Standarddruckers in Access unverändert.
  • Wenn der Standarddrucker in Windows geändert wird, während die Datenbank geöffnet ist, bekommt Access diese Änderung nicht mit.
 ' Access-Standarddrucker auslesen
 MsgBox Application.Printer.DeviceName
 
 ' Access-Standarddrucker ändern
 Application.Printer = Application.Printers("NeuerDruckername")

Die Namen aller Drucker auflisten, die beim Öffnen der Access-Datenbank installiert waren:

 Dim prt As Printer
 
 For Each prt In Application.Printers
   Debug.Print prt.DeviceName
 Next prt

Netzwerkdrucker ansprechen

  • Ein Netzwerkdrucker wird in der Systemsteuerung in der Form Mein Inkjet Drucker an Mein-Netzwerk-PC oder Mein Inkjet Drucker auf Mein-Netzwerk-PC dargestellt.
  • Um diesen Drucker über obigen Code als Standarddrucker einzustellen, muß der Druckername in folgender Form eingegeben werden:
    \\Mein-Netzwerk-PC\Mein Inkjet Drucker.
  • Falls ich unsicher bin, wie die korrekte Schreibweise des Netzwerkdrucker-Namens lautet, stelle ich den Netzwerkdrucker testweise manuell als Standarddrucker ein, und lese anschließend seinen Namen über die obige Funktion aus.

Wikilinks