Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1336to1340
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Systemdrucker in Tabelle laden

Systemdrucker in Tabelle laden
03.11.2013 20:11:57
Henner
Hallo zusammen,
mit folgendem Code lasse ich mir die im System eingerichteten Drucker in eine Tabelle laden:

Dim objWMI As Object, colPrinters As Object, objPrinter As Object, LoZaehler As Long
Set objWMI = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & "." & "\root\cimv2")
Set colPrinters = objWMI.ExecQuery _
("Select * from Win32_PrinterConfiguration")
For Each objPrinter In colPrinters
Sheets("Drucker").Cells(LoZaehler + 1, 1) = objPrinter.devicename
LoZaehler = LoZaehler + 1
Next
Das funktioniert soweit auch prima. Handelt es sich allerdings um einen Netzwerkdrucker mit einem etwas längeren Pfad, wird nicht der gesamte Pfad in die Zelle geschrieben.
Im System eingerichtet ist der Drucker so:

HP Deskjet 6940 series (Kopie1) auf MODEM-PC
In die Zelle wird geschrieben:

\\MODEM-PC\HP Deskjet 6940 ser
Da die Einträge in den Zellen später u.a. auch zur Druckerauswahl genutzt werden, muss der Pfad komplett eingetragen werden da mit der Drucker später unter dem Pfad auch gefunden werden kann - das ist jetzt nicht der Fall.
Wie liesse sich diese Herausforderung wohl geschickt lösen?
Danke für Eure Hilfe und viele Grüsse
Henner

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Systemdrucker in Tabelle laden
03.11.2013 22:46:16
fcs
Hallo Henner,
versuche es mal mit anderen Parametern zum Drucker-Objekt.
Gruß
Franz
Sub GetPrinters()
Dim objWMI As Object, colPrinters As Object, objPrinter As Object, LoZaehler As Long
Dim strPrinter As String
Set objWMI = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & "." & "\root\cimv2")
Set colPrinters = objWMI.ExecQuery _
("Select * from Win32_PrinterConfiguration")
For Each objPrinter In colPrinters
Sheets("Drucker").Cells(LoZaehler + 1, 1) = objPrinter.Devicename
'            Debug.Print "Path_.keys(""Name""): " & objPrinter.Path_.keys("Name")
Sheets("Drucker").Cells(LoZaehler + 1, 2) = objPrinter.Path_.keys("Name")
'            Debug.Print "Path_.RelPath: " & objPrinter.Path_.RelPath
strPrinter = objPrinter.Path_.RelPath
strPrinter = Mid(strPrinter, InStr(1, strPrinter, "=") + 2)
strPrinter = Left(strPrinter, Len(strPrinter) - 1)
Sheets("Drucker").Cells(LoZaehler + 1, 3) = strPrinter
'            Debug.Print "Properties_(""Description""): " & objPrinter.Properties_("Description" _
)
Sheets("Drucker").Cells(LoZaehler + 1, 4) = objPrinter.Properties_("Description")
LoZaehler = LoZaehler + 1
Next
End Sub

Anzeige
AW: Systemdrucker in Tabelle laden
04.11.2013 07:09:25
Henner
Hallo Franz,
(mal wieder) vielen Dank für Deinen Vorschlag! Werde morgen Abend an besagtem PC testen können und melde mich dann wieder. Dein Code hat die Drucker in die Spalten A-D geschrieben, habe es nachfolgend mal auf Spalte A reduziert.
Danke, Gruss und bis morgen ;-)

Sub GetPrinters()
Cells.ClearContents
Dim objWMI As Object, colPrinters As Object, objPrinter As Object, LoZaehler As Long
Dim strPrinter As String
Set objWMI = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & "." & "\root\cimv2")
Set colPrinters = objWMI.ExecQuery _
("Select * from Win32_PrinterConfiguration")
For Each objPrinter In colPrinters
Sheets("Drucker").Cells(LoZaehler + 1, 1) = objPrinter.Devicename
'            Debug.Print "Path_.keys(""Name""): " & objPrinter.Path_.keys("Name")
Sheets("Drucker").Cells(LoZaehler + 1, 1) = objPrinter.Path_.keys("Name")
'            Debug.Print "Path_.RelPath: " & objPrinter.Path_.RelPath
strPrinter = objPrinter.Path_.RelPath
strPrinter = Mid(strPrinter, InStr(1, strPrinter, "=") + 2)
strPrinter = Left(strPrinter, Len(strPrinter) - 1)
Sheets("Drucker").Cells(LoZaehler + 1, 1) = strPrinter
'            Debug.Print "Properties_(""Description""): " & objPrinter.Properties_("Description" _
_
)
Sheets("Drucker").Cells(LoZaehler + 1, 1) = objPrinter.Properties_("Description")
LoZaehler = LoZaehler + 1
Next
End Sub

Anzeige
AW: Systemdrucker in Tabelle laden
04.11.2013 09:36:20
fcs
Hallo Henner,
ich hatte die Informationen zum Testen in verschiedene Spalten schreiben lassen.
Ich hab das Makro auf einem lokalen Rechner ohne Netzwerkdrucker getestet; kann also nicht sagen, welche Infos bei einem Netzwerkdrucker ausgegeben werden.
Auf jeden Fall werden lange Druckernamen/-Bezeichnungen nicht abgeschnitten, wie bei "objPrinter.Devicename".
Ansonsten kannst du im VBA-Editor das Lokal-Fenster einblenden und dann bei Ausführung des Makros im Schrittmodus prüfen, welche Eigenschaften zur Variablen "objPrinter" angezeigt werden und ggf. andere Werte für deine Zwecke nutzen.
mfg
Franz

Anzeige
AW: Systemdrucker in Tabelle laden
04.11.2013 20:09:14
Henner
Nabend Franz,
ich konnte bereits heute Abend testen - hier das Ergebnis:
Variante 1 (Spalte A):

\\MODEM-PC\HP Deskjet 6940 ser
Variante 2 (Spalte B):

\\MODEM-PC\HP Deskjet 6940 series (Kopie 1)
Variante 3 (Spalte C):

\\\\MODEM-PC\\HP Deskjet 6940 series (Kopie 1)
Variante 4 (Spalte D):

\\MODEM-PC\HP Deskjet 6940 series (Kopie 1)
V2 und V4 sind für mich perfekt. Wieder einmal vielen vielen Dank!
Gruss Henner
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige