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 Access-Standarddrucker auslesen oder ändern.

Lösung 1: Auslesen oder Ändern

Das Auslesen bzw. das Ändern geht mit den folgenden API-Funktionen und VBA-Funktionen, die in einem globalen Modul hinterlegt werden.

Private Declare Function GetDefaultPrinter Lib "winspool.drv" Alias "GetDefaultPrinterA" ( _
                         ByVal pszBuffer As String, _
                         ByRef pcchBuffer As Long _
                         ) As Long
 
Private Declare Function SetDefaultPrinter Lib "winspool.drv" Alias "SetDefaultPrinterA" ( _
                         ByVal pszPrinter As String _
                         ) As Long
 
 
Public Function Standarddruckername()
 
 'Windows-Standarddruckernamen auslesen
 'Quelle: www.dbwiki.net oder www.dbwiki.de
 
 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
 
 
Public Function StandarddruckerÄndern(ByVal Druckername As String) As Boolean
 
 'Windows-Standarddrucker ändern
 'Quelle: www.dbwiki.net oder www.dbwiki.de
 
 StandarddruckerÄndern = CBool(SetDefaultPrinter(Druckername & vbNullChar))
 
End Function

Lösung 2: Auslesen

Das Auslesen geht auch mit den folgenden API-Funktionen und VBA-Funktionen, die in einem globalen Modul hinterlegt werden.

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
 
 'Windows-Standarddruckernamen auslesen
 'Quelle: www.dbwiki.net oder www.dbwiki.de
 
 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

Aufruf

Standarddrucker auslesen

MsgBox Standarddruckername

Standarddrucker ändern

Call StandarddruckerÄndern("NeuerDruckername")
Alternative: Aufruf mit Rückgabewert
 If StandarddruckerÄndern("NeuerDruckername") = True Then
   MsgBox "Die Änderung war erfolgreich."
 Else
   MsgBox "Die Änderung war nicht erfolgreich."
 End If


Access-Standarddrucker auslesen oder ändern

  • Ab Access XP kann auch der Standarddrucker, der nur innerhalb der Access-Datenbank verwendet wird, ausgelesen bzw. geändert werden.
  • Beim Schließen der Datenbank wird diese Änderung wieder verworfen.
  • Der Windows-Standarddrucker bleibt davon unberührt.
 'Access-Standarddrucker auslesen
 MsgBox Application.Printer.DeviceName
 
 'Access-Standarddrucker ändern
 Application.Printer = Application.Printers("NeuerDruckername")


Netzwerkdrucker ansprechen

  • Ein Netzwerkdrucker wird in der Systemsteuerung in der Form Mein Inkjet Drucker an 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.


Wiki-Links