Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.10.2025 10:28:49
16.10.2025 17:40:39
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Ermittlung der installierten Drucker mit VBA

Forumthread: Ermittlung der installierten Drucker mit VBA

Ermittlung der installierten Drucker mit VBA
21.09.2005 21:20:05
Martin
Hallo Forum
Ich möchte an mehreren unterschiedlichen Rechnern die installierten Druckertreiber via VBA ermitteln. Als Ergebnis soll im Tabellenblatt "Tabelle 1" eine Auflistung stehen.
z.B.:
"SnagIt 6 auf Ne00:"
"hp deskjet 990c series auf Ne01:"
"FreePDF XP auf Ne02:"
Wie kann ich das ermitteln ?
Für eure Hilfe bedanke ich mich bereits im voraus.
Gruss
Martin
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ermittlung der installierten Drucker mit VBA
21.09.2005 21:27:48
K.Rola
Hallo,
Option Explicit
Sub Alle_Drucker()
Dim objWMI As Object, colPrinters As Object, objPrinter As Object
Dim intPrinters
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
Gruß K.Rola

Anzeige
AW: Ermittlung der installierten Drucker mit VBA
21.09.2005 22:03:00
Martin
Hallo K.Rola
Super
Habe das Macro bereits an 2 Rechnern ausprobiert. Dabei fällt mir jedoch auf, das der Anhang " auf Ne00:", " auf Ne01:" ... fehlt ! Wenn kein Drucker am LPT hängt kann ich es einfach aufsteigend anhängen. Das Problem: Wann ist ein Drucker am LPT ? Gibt es dazu noch Möglichkeiten dieses genauer zu ermitteln ?
Gruss
Martin
Anzeige
Zusatzfrage: Port
22.09.2005 09:00:56
Rolf
Hallo K.Rola,
geht in Spalte B auch noch der entsprechende Port?
Herzliche Grüße
Rolf
AW: Zusatzfrage: Port
22.09.2005 12:01:56
K.Rola
Hallo,
geht alles und noch viel mehr:
Option Explicit
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
Private Sub GetName(ByVal sBuf As String)
Dim i As Integer, stName As String
iCount = 0
Do
i = InStr(sBuf, Chr(0))
If i > 0 Then
stName = Left$(sBuf, i - 1)
If Len(Trim$(stName)) > 0 Then
sName(iCount) = Trim$(stName)
iCount = iCount + 1
End If
sBuf = Mid$(sBuf, i + 1)
Else
If Len(Trim$(sBuf)) > 0 Then
sName(iCount) = Trim$(sBuf)
iCount = iCount + 1
End If
sBuf = ""
End If
Loop While (i > 0) And (iCount < MP)
End Sub
Private Sub GetPort()
Dim sBuf As String
Dim i As Integer
For i = 0 To iCount - 1
sBuf = Space$(1024)
GetProfileString "PrinterPorts", sName(i), "", sBuf, Len(sBuf)
GetDr_Port sBuf, sDriver(i), sPort(i)
Next
End Sub
Private Sub GetDr_Port(ByVal bf As String, dn As String, pp As String)
Dim iD As Integer, iP As Integer
dn = ""
pp = ""
iD = InStr(bf, ",")
If iD > 0 Then
dn = Left$(bf, iD - 1)
iP = InStr(iD + 1, bf, ",")
If iP > 0 Then
pp = Mid$(bf, iD + 1, iP - iD - 1)
End If
End If
End Sub
Gruß K.Rola

Anzeige
AW: Zusatzfrage: Port
22.09.2005 14:09:29
Rolf
Hallo K.Rola,
danke für deine Lösung.
Angesichts meiner dir bekannten API-Abneigung,
hatte ich natürlich auf eine WMI-Lösung gehofft.
Aber wat nich is, dat is nich.
Herzliche Grüße
Rolf
AW: Ermittlung der installierten Drucker mit VBA
21.09.2005 21:28:45
René
Hi,
das müsste dir weiter helfen
https://www.herber.de/bbs/user/26823.zip
have fun,
lg René
Anzeige
AW: Ermittlung der installierten Drucker mit VBA
21.09.2005 22:22:43
Martin
Hallo René
Danke für den Link.
Gruss
Martin
;
Anzeige
Anzeige

Infobox / Tutorial

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
  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu (Einfügen > Modul).
  3. Kopiere den oben genannten Code in das Modul.
  4. Schließe den VBA-Editor und kehre zu Excel zurück.
  5. 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.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige