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

Drucker auslesen, auswählen und drucken

Forumthread: Drucker auslesen, auswählen und drucken

Drucker auslesen, auswählen und drucken
25.05.2004 22:23:53
Raffi
Hallo zusammen,
Habe den Code, den ich hier gefunden habe, bei mir eingebaut:
https://www.herber.de/mailing/volumina/168902x.htm
Mit diesem Code werden alle installierten Drucker ausgelesen.
Die Druckernamen lasse ich in eine Combobox füllen. Leider komm ich irgendwie nicht weiter. Wie kann ich nun auf dem ausgewählten Drucker drucken. Das Problem ist, dass der Wert in der ComboBox z.B. "Drucker1" ist, jedoch zum drucken der Wert "Drucker1 auf USB0001" nötig ist. Leider kann ich nicht statisch den String "auf USB 001" anhängen, den der Code soll auf verschiedenen Computern mit unterschiedlichen Netzwerkdruckern ausgeführt werden.
Ich hoffe, ihr versteht mein Problem und könnt mir helfen.
Vielen Dank und Gruss
Raffi
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Drucker auslesen, auswählen und drucken
26.05.2004 06:30:40
GraFri
Hallo
Die Druckernamen sind bekannt, daher nur mehr den Drucker wechseln. Hier ein Beispiel wie das geht. Du mußt nur den Druckernamen mittels Variablen einsetzen. Konnte es nur unter Office 2000 testen.


Declare Function WriteProfileString Lib "kernel32" Alias "WriteProfileStringA" _
(ByVal lpszSection As StringByVal lpszKeyName As String, _
ByVal lpszString As StringAs Long
Declare Function GetProfileString Lib "kernel32" Alias "GetProfileStringA" _
(ByVal lpAppName As StringByVal lpKeyName As String, _
ByVal lpDefault As StringByVal lpReturnedString As StringByVal nSize As LongAs Long
Declare Function SendMessage Lib "User32" Alias "SendMessageA" _
(ByVal hWnd As LongByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) As Long
Public Const HWND_BROADCAST = &HFFFF&
Public Const WM_WININICHANGE = &H1A
Dim DruckerName As String
Sub Ausdrucken()
Call Drucker_Wechseln("OKIPAGE 10ex LPT1")
'Sheets(1).PrintOut
'Call Drucker_Wechseln("hp deskjet 990c series")
End Sub
Sub Drucker_Wechseln(DruckerName As String)
    SetDefaultPrinter DruckerName
End Sub
Public Function SetDefaultPrinter(PrName As String)
' Parameter: Druckername
' Rückgabewert: Erfolg der Aktion
Dim Buffer As String, RW, Tmp As String
On Error GoTo Er
Buffer = String(255, 0)
RW = GetProfileString(ByVal "devices", ByVal PrName, ByVal "", Buffer, Len(Buffer))
If RW <= 0 Then
    SetDefaultPrinter = False
    Exit Function
Else
    Tmp = PrName & "," & Mid(Buffer, 1, RW)
End If
' Standarddrucker setzen
RW = WriteProfileString(ByVal "Windows", ByVal "Device", ByVal Tmp)
If RW <> 1 Then
SetDefaultPrinter = False
Exit Function
End If
' und mitteilen, daß sich die WIN.INI geändert hat
RW = SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0&, 0&)
SetDefaultPrinter = True
Ex:
Exit Function
Er:
MsgBox "SetDefaultPrinter: " & Err.Description
SetDefaultPrinter = False
Resume Ex
Mit freundlichen Grüßen, GraFri
Anzeige
AW: Drucker auslesen, auswählen und drucken
26.05.2004 08:22:03
Raffi
Danke für die Hilfe. Das kann ich brauchen.
Merci bien und Gruss
Raffi
ActivePrinter
26.05.2004 07:13:06
Well
Wenn du den Druckernamen schon hast:
alterDrucker =Application.ActivePrinter
Application.ActivePrinter = neuerDrucker
Drucken
Application.ActivePrinter = alterDrucker
Fare Well
Anzeige
Anzeige

Infobox / Tutorial

Drucker auslesen und auswählen in Excel mit VBA


Schritt-für-Schritt-Anleitung

  1. Drucker auslesen: Um alle installierten Drucker in Excel auszulesen, kannst du den folgenden VBA-Code verwenden. Dieser Code füllt eine ComboBox mit den Druckernamen:

    Sub DruckerAuslesen()
       Dim Drucker As Variant
       For Each Drucker In Application.PrinterNames
           ComboBox1.AddItem Drucker
       Next Drucker
    End Sub
  2. Drucker auswählen: Um den ausgewählten Drucker in der ComboBox zu setzen und zu drucken, kannst du den folgenden Code verwenden:

    Sub Drucken()
       Dim alterDrucker As String
       Dim neuerDrucker As String
    
       alterDrucker = Application.ActivePrinter
       neuerDrucker = ComboBox1.Value ' Der ausgewählte Drucker aus der ComboBox
    
       Application.ActivePrinter = neuerDrucker
       ActiveSheet.PrintOut
       Application.ActivePrinter = alterDrucker
    End Sub
  3. Druckerwechseln: Falls du den Drucker dynamisch ändern musst, kannst du den Druckernamen mit der notwendigen Endung verknüpfen. Hier ein Beispiel, wie du das umsetzen kannst:

    Sub Drucker_Wechseln(DruckerName As String)
       SetDefaultPrinter DruckerName
    End Sub

Häufige Fehler und Lösungen

  • Fehler: Drucker nicht gefunden: Wenn der ausgewählte Drucker nicht gefunden wird, überprüfe, ob der Druckername genau mit dem in der ComboBox übereinstimmt. Achte auf Leerzeichen oder zusätzliche Zeichen.

  • Fehler: Keine Druckaufträge: Wenn nach dem Drucken keine Aufträge gesendet werden, stelle sicher, dass der Drucker online ist und keine Fehler vorliegen.


Alternative Methoden

Eine alternative Methode zum Auslesen der Drucker ist die Verwendung von API-Funktionen. Du kannst die Windows-API verwenden, um Druckereigenschaften zu ändern:

Declare Function WriteProfileString Lib "kernel32" Alias "WriteProfileStringA" (ByVal lpszSection As String, ByVal lpszKeyName As String, ByVal lpszString As String) As Long

Mit dieser Methode kannst du den Standarddrucker direkt über die Windows-Systemprofile ändern.


Praktische Beispiele

  1. Drucker wechseln und drucken:

    Wenn du den Drucker wechseln und direkt drucken möchtest, kannst du diesen Code verwenden:

    Sub DruckAufDrucker()
       Dim DruckerName As String
       DruckerName = "Drucker1 auf USB0001" ' Füge hier den vollständigen Druckernamen ein
    
       Drucker_Wechseln(DruckerName)
       ActiveSheet.PrintOut
    End Sub
  2. Dynamisches Auslesen: Wenn du eine Liste aller Drucker in ein Arbeitsblatt einfügen möchtest:

    Sub DruckerListe()
       Dim i As Integer
       For i = 0 To Application.PrinterNames.Count - 1
           Cells(i + 1, 1).Value = Application.PrinterNames(i)
       Next i
    End Sub

Tipps für Profis

  • Verwende Fehlerbehandlung in deinem VBA-Code, um unerwartete Probleme zu vermeiden. Ein einfacher On Error Resume Next kann helfen.
  • Halte deine Druckerwahl benutzerfreundlich. Füge beschreibende Labels zu deinen ComboBoxen hinzu, um die Auswahl zu erleichtern.
  • Teste den Code in verschiedenen Excel-Versionen, da sich die Funktionsweise und die API-Methoden zwischen den Versionen unterscheiden können.

FAQ: Häufige Fragen

1. Wie kann ich den Standarddrucker in Excel ändern?
Du kannst den Standarddrucker ändern, indem du den Namen des gewünschten Druckers über die Application.ActivePrinter-Eigenschaft setzt.

2. Was mache ich, wenn mein Drucker nicht in der Liste erscheint?
Stelle sicher, dass der Drucker korrekt installiert ist und dass du über die notwendigen Berechtigungen verfügst, um auf ihn zuzugreifen. Versuche, die Drucker erneut auszulesen.

3. Kann ich auch Netzwerkdrucker auslesen?
Ja, alle installierten Drucker, einschließlich Netzwerkdrucker, können über die Application.PrinterNames-Eigenschaft ausgelesen werden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige