Ermittlung der installierten Drucker mit VBA
Schritt-für-Schritt-Anleitung
Um die installierten Drucker via VBA auszulesen und in Excel aufzulisten, kannst Du den folgenden Code verwenden:
Option Explicit
Sub Alle_Drucker()
Dim objWMI As Object, colPrinters As Object, objPrinter As Object
Dim intPrinters As Integer
Set objWMI = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & "." & "\root\cimv2")
Set colPrinters = objWMI.ExecQuery _
("Select * from Win32_PrinterConfiguration")
For Each objPrinter In colPrinters
intPrinters = intPrinters + 1
Sheets("Tabelle1").Cells(intPrinters, 1) = objPrinter.Name
Next
End Sub
- Öffne Excel und drücke
ALT + F11
, um den VBA-Editor zu öffnen.
- Füge ein neues Modul hinzu (
Einfügen
> Modul
).
- Kopiere den oben genannten Code in das Modul.
- Schließe den VBA-Editor und kehre zu Excel zurück.
- Führe das Makro
Alle_Drucker
aus, um die Drucker aufzulisten.
Häufige Fehler und Lösungen
-
Fehler: Keine Drucker werden angezeigt.
Stelle sicher, dass Du die richtigen Berechtigungen hast und dass WMI-Dienste aktiv sind.
-
Fehler: Nur Druckernamen ohne Ports.
Der ursprüngliche Code listet nur die Namen auf. Um Ports anzuzeigen, musst Du den Code erweitern, wie in der nächsten Sektion beschrieben.
Alternative Methoden
Wenn Du eine WMI-Lösung bevorzugst, kannst Du den folgenden erweiterten Code verwenden, um nicht nur die Druckernamen, sondern auch die Ports und Treiber auszulesen:
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
Private Const MP = 16
Private sName(MP) As String
Private sDriver(MP) As String
Private sPort(MP) As String
Private iCount As Integer
Sub Printer_List()
Dim sBuf As String, i As Integer
sBuf = Space$(8192)
GetProfileString "PrinterPorts", vbNullString, "", sBuf, Len(sBuf)
GetName sBuf
GetPort
For i = 0 To iCount
Tabelle1.Cells(i + 1, 1) = sName(i)
Tabelle1.Cells(i + 1, 2) = sPort(i)
Tabelle1.Cells(i + 1, 3) = sDriver(i)
Next
End Sub
Praktische Beispiele
Ein Beispiel für die Ausgabe könnte folgendermaßen aussehen:
Druckername |
Port |
Treiber |
SnagIt 6 |
Ne00 |
SnagIt 6 Driver |
hp deskjet 990c series |
Ne01 |
HP Deskjet Driver |
FreePDF XP |
Ne02 |
FreePDF Driver |
Du kannst den Code anpassen, um die Informationen in der gewünschten Form anzuzeigen.
Tipps für Profis
- WMI-Abfragen optimieren: Nutze spezifische Filter in der WMI-Abfrage, um nur relevante Drucker anzuzeigen.
- Makros automatisieren: Du kannst das Makro so einstellen, dass es beim Öffnen der Datei automatisch ausgeführt wird, um die neuesten Druckerinformationen anzuzeigen.
- Fehlerprotokollierung: Implementiere eine Fehlerprotokollierung, um Probleme beim Auslesen der Drucker zu identifizieren.
FAQ: Häufige Fragen
1. Wie kann ich den Code anpassen, um nur Netzwerkdrucker anzuzeigen?
Du kannst die WMI-Abfrage entsprechend anpassen, indem Du nur Drucker auswählst, die einen bestimmten Porttyp verwenden.
2. Funktioniert dieser Code in allen Excel-Versionen?
Ja, der Code sollte in den meisten Excel-Versionen funktionieren, die VBA unterstützen.
3. Was mache ich, wenn VBA deaktiviert ist?
Aktiviere VBA in den Excel-Optionen unter den Sicherheits- und Datenschutz-Einstellungen.