Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Drucker auslesen unter Office 2024 2.0

Forumthread: Drucker auslesen unter Office 2024 2.0

Drucker auslesen unter Office 2024 2.0
31.10.2025 15:28:25
Amaranth
Hallo zusammen,

ich hatte vor kurzem mein Problem hier gestartet: https://www.herber.de/forum/archiv/2020to2024/2020130_Drucker_auslesen_unter_Office_2024.html#2020166

Nun hatte ich die letzten Tage keine Zeit und bin erst heute dazu gekommen hier weiter zu forschen.

Leider tritt das Problem aktuell nur bei 2 von ca 60 Leuten auf.

WMI funktioniert.

Da wir Omnissa einsetzen sind die Maschinen ja nur Klone, so langsam beschleicht mich das Gefühl es ist ein Word Problem beim User.

Aktuell wird eine ganz andere Sache angemarkert. Nur um sicherzugehen, dass ich nicht doch aus Unwissenheit einen Fehler eingebaut habe:

'Sub zum auslesen der Drucker

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
If objPrinter.Name = "\\Drucker1" Then
intSecPrint = intSecPrint + 1
ElseIf objPrinter.Name = "\\Drucker2" Then
intSecPrint = intSecPrint + 2
ElseIf objPrinter.Name = "\\Drucker3" Then
intSecPrint2 = intSecPrint2 + 1
ElseIf objPrinter.Name = "\\Drucker4" Then
intSecPrint2 = intSecPrint2 + 2
ElseIf objPrinter.Name = "\\Drucker5" Then
intTA = intTA + 1
ElseIf objPrinter.Name = "\\Drucker6" Then
intTA = intTA + 2
ElseIf objPrinter.Name = "\\Drucker7" Then
intKAS = intKAS + 1
ElseIf objPrinter.Name = "\\Drucker8" Then
intKAS = intKAS + 2
ElseIf objPrinter.Name = "\\Drucker9" Then
intKAS2 = intKAS2 + 1
ElseIf objPrinter.Name = "\\Drucker10" Then
intKAS2 = intKAS2 + 2
ElseIf objPrinter.Name = "\\Drucker11" Then
intRA = intRA + 1
ElseIf objPrinter.Name = "\\Drucker12" Then
intRA = intRA + 2
End If
Next
End Sub


Aktuell wird die vorletzte Zeile angemarkert weil dem Next die For-Schleife fehlt. Aber "For Each" ist doch der Beginn....
Wie gesagt nur 2 Leute bekommen die Fehlermeldung. Und ich kann ihn bei mir gar nicht replizieren.
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Drucker auslesen unter Office 2024 2.0
31.10.2025 17:32:10
Herbert Grom
Hallo Amaranth,

ich habe deinen Code mal mit "Option Explicit" bearbeitet und alle Variablen dimensioniert und er lief einwandfrei.

Option Explicit



Sub Alle_Drucker()
Dim objWMI As Object, colPrinters As Object, objPrinter As Object, intPrinters
Dim intSecPrint&, intSecPrint2&, intKas&, intKas2&, intTa&, intRa&

Set objWMI = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & "." & "\root\cimv2")

Set colPrinters = objWMI.ExecQuery("Select * from Win32_PrinterConfiguration")

For Each objPrinter In colPrinters
If objPrinter.Name = "\\Drucker1" Then
intSecPrint = intSecPrint + 1
ElseIf objPrinter.Name = "\\Drucker2" Then
intSecPrint = intSecPrint + 2
ElseIf objPrinter.Name = "\\Drucker3" Then
intSecPrint2 = intSecPrint2 + 1
ElseIf objPrinter.Name = "\\Drucker4" Then
intSecPrint2 = intSecPrint2 + 2
ElseIf objPrinter.Name = "\\Drucker5" Then
intTa = intTa + 1
ElseIf objPrinter.Name = "\\Drucker6" Then
intTa = intTa + 2
ElseIf objPrinter.Name = "\\Drucker7" Then
intKas = intKas + 1
ElseIf objPrinter.Name = "\\Drucker8" Then
intKas = intKas + 2
ElseIf objPrinter.Name = "\\Drucker9" Then
intKas2 = intKas2 + 1
ElseIf objPrinter.Name = "\\Drucker10" Then
intKas2 = intKas2 + 2
ElseIf objPrinter.Name = "\\Drucker11" Then
intRa = intRa + 1
ElseIf objPrinter.Name = "\\Drucker12" Then
intRa = intRa + 2
End If
Next
End Sub


Probiers mal.

Servus
Anzeige
AW: Drucker auslesen unter Office 2024 2.0
02.11.2025 08:43:50
schauan
Hallöchen,
- Schaue bei den zwei Leuten mal nach den Verweisen, eventuell passt da was nicht.
- Schaue generell, ob bei Dir Verweise sind, die Du in dem Projekt nicht benötigst

Programmiere statt mit reichlich Else If anders - z.B.

'Sub zum auslesen der Drucker

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
Select Case objPrinter.Name
Case "\\Drucker1": intSecPrint = intSecPrint + 1
Case "\\Drucker2": intSecPrint = intSecPrint + 2
'...
Case "\\Drucker12": intRA = intRA + 2
Case Else: MsgBox "Drucker " & objPrinter.Name & " ist nicht 1 - 12"
End Select
Next
End Sub
Anzeige
AW: Drucker auslesen unter Office 2024 2.0
31.10.2025 20:31:03
Onur
Das Ganze kann doch nur funktionieren, wenn alle Variablen mit "Int" am Anfang GLOBAL deklariert werden (wurden), da ja sonst nix mit ihnen innerhalb dieser Sub passiert bzw gemacht wird.
AW: Drucker auslesen unter Office 2024 2.0
03.11.2025 10:43:50
Amaranth
Guten Morgen, scheinbar hab ich meinen Beitrag am Wochenende nicht abgeschickt.

Natürlich sind die Variablen Global deklariert, ich benötige sie ja noch in anderen Subs. Hier wird nur ausgelesen, um dem User später zu sagen, welchen Drucker er noch installieren muss, damit der Druck funktioniert.

Option Explizit ist ebenfalls global.
Anzeige
AW: Drucker auslesen unter Office 2024 2.0
03.11.2025 10:34:40
schauan
https://www.clever-excel-forum.de/Thread-VBA-Nachhilfe-Variablendeklaration?pid=60637#pid60637

wobei weder die fehlende Variablendeklaration noch die Verwendung von ElseIf ursächlich für das Problem sind.

1)
Zu den Verweisen noch eine Anmerkung. Problematisch ist zuweilen, z.B. bei EarlyBinding, wenn die Anwender eine niedrigere Excel-Version haben als der Programmierer. Da hilft ggf. LateBinding oder programmieren in der niedrigeren Version,

2)
"unmögliche" Fehler konnte ich auch schon durch nochmaliges speichern in anderem Format lösen - also Wechsel zwischen xlsm und xlsb

3)
schlimmstenfalls habe ich das Projekt einfach nur neu aufgesetzt - also alle Module, UF, und Codes exportiert bzw. gesichert, die Datei als xlsx gespeichert, Excel beendet, und dann wieder gestartet und alles importiert bzw. eingefügt ...
Das reduziert übrigens oftmals die xls bzw. xlsm - Dateigröße :-) Excel behält unsinnigerweise irgendwo irgendwelche "Arbeitsfragmente" vom Programmieren. 2) hilft da übrigens auch :-)
Anzeige
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18