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

Forumthread: Drucker auswählen

Drucker auswählen
Benedikt
Guten Abend zusammen
Zum ausdrucken als PDF sollte ich den Standarddrucker wechseln
Mit Druckerdialog und manuell auswählen klappt das :
Application.Dialogs(9).Show
Range("$B$3:Total").Select
Selection.PrintOut
Gerne würde ich aber ohne Dialogfeld arbeiten aber so geht das nicht:
Application.Printer = Application.Printers("Aloaha PDF Drucker")
Range("$B$3:Total").Select
Selection.PrintOut
Vielen Dank für Hilfe und einen schönen Abend
Anzeige

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

Betreff
Benutzer
Anzeige
AW: Drucker auswählen
01.08.2010 00:06:49
Ramses
Hallo
Es muss auch der Druckeranschluss mit übergeben werden.
Probier mal das hier
'*****************************
'Drucker ändern
Sub StartDruckerSetting()
    If Change_Printer_Setting("Adobe PDF") = True Then
        MsgBox "Aktueller Drucker ist " & Application.ActivePrinter, vbInformation + vbOKOnly, "Änderung"
    Else
        MsgBox "Drucker konnte nicht gefunden werden", vbCritical + vbOKOnly, "Änderung"
    End If
End Sub

Function Change_Printer_Setting(strDruckerName As String) As Boolean
    Dim i As Integer, conPort As String
    Dim oldPrinter As String
    oldPrinter = Application.ActivePrinter
    On Error Resume Next
    'Hauruck Methode
    'Fehler treten auf wenn der Anschluss nicht bekannt ist
    'Zuweisungsschleife starten
    '99 Anschlüsse sollten reichen :-)
    
    For i = 1 To 99
        conPort = Format(i, "00")
        Application.ActivePrinter = strDruckerName & " auf Ne" & conPort & ":"
        If Application.ActivePrinter <> oldPrinter Then
            Change_Printer_Setting = True
            Exit Function
        End If
    Next i
End Function
'Ende Code Sequenz
'**********************************************

Gruss Rainer
Anzeige
Geht das nicht einfacher?
01.08.2010 06:46:28
Benedikt
Vielen lieben Dank für deinen Code, aber für mich ist das zu kompliziert.
AW: Geht das nicht einfacher?
01.08.2010 11:38:16
ransi
HAllo Benedikt
Geht das nicht einfacher?
Also mit einem 2-Zeiler ist sowas nicht zumachen !
Versuch mal die Public Sub Aufruf() nachzuvollziehen.
Option Explicit

Public Sub Aufruf()
Dim Alter_Drucker
Alter_Drucker = ActivePrinter 'Derzeitigen Standarddrucker merken
Call PDF_Drucker_als_Standarddrucker 'Umschalten auf PDF-Drucker
Sheets("Tabelle1").Range("B1:B10").PrintOut 'Drucken
ActivePrinter = Alter_Drucker 'Zurücksetzen auf alten Standarddrucker
End Sub


Public Sub PDF_Drucker_als_Standarddrucker()
Dim WSHNetwork As Object
Dim Alle_Drucker
Dim I As Integer
Set WSHNetwork = CreateObject("WScript.Network")
Set Alle_Drucker = WSHNetwork.EnumPrinterConnections
For I = 0 To Alle_Drucker.Count - 1 Step 2
    ' Z.B. PDF-Drucker als ActivePrinter setzen
    If UCase(Alle_Drucker.Item(I + 1)) Like "*PDF*" Then
        WSHNetwork.setdefaultprinter Alle_Drucker.Item(I + 1)
        Exit For
    End If
Next
End Sub


ransi
Anzeige
Sorry ist wohl falsch rübergekommen
01.08.2010 12:38:20
Benedikt
Hallo Ransi
Das "geht das nicht einfacher?" ist wohl in den falschen Hals geraten. Mir ist klar das für solche Profis wie Ihr das seid, nicht einleuchtet das ein Laie mit "WSHNetwork etc." nicht ganz klar kommt. Und wenn der Jahrgang ebenfalls noch fortschreitet geht es nicht mehr so einfach. Das Problem an solch ausführlichen Codes ist, das ich das nicht verstehe und entsprechend keinen einfluss auf das geschehen mehr habe, sprich es ist nicht möglich etwas zu Ändern. Also Sorry wenn etwas falsch daher gekommen ist
Nachfolgende "Bastelei" funktioniert auch, nur muss der PDF Drucker manuel aus dem Dialogfeld geöffnet werden. Und das war eigentlich die Frage wie das "Application.Dialogs(9).Show" umgangen werden könnte
Dim Drucker As String
Drucker = Application.ActivePrinter
Application.Dialogs(9).Show
Range("$B$3:Total").Select
Selection.PrintOut
Unload Me
Application.ActivePrinter = Drucker
End Sub
Anzeige
AW: Sorry ist wohl falsch rübergekommen
01.08.2010 12:53:59
Ramses
Hallo
Tut mir leid,...aber beide methoden sind ganz einfach, auch für ältere und unbedarfte.
In meinem Fall, ist es egal wo der Drucker angeschlossen ist. Ich geh alle Anschlüsse einfach durch. Wenns klappt ist gut, wenn nicht kommt die entsprechende Meldung. Das geht so schnell dass du es nicht merkst.
In deinem Codebeispiel sieht das so aus.
Dim Drucker As String
Drucker = Application.ActivePrinter
If Change_Printer_Setting("Adobe PDF") = True Then
MsgBox "Aktueller Drucker ist " & Application.ActivePrinter, vbInformation + vbOKOnly, "Änderung"
Else
MsgBox "Drucker konnte nicht gefunden werden", vbCritical + vbOKOnly, "Änderung"
End If
Range("$B$3:Total").Select
Selection.PrintOut
Unload Me
Application.ActivePrinter = Drucker
End Sub
In Ransis Beispiel werden die installierten Drucker aus der Registry ausgelesen und geprüft ob irgendwo PDF in der Druckerbezeichnung vorkommt. Der Drucker wird dann als aktiv gesetzt. Kann aber sein, dass wenn mehrere PDF Drucker installiert sind, der Druck nicht unbedingt auf dem Drucker ausgegeben wird denn du erwartest. Wenn es ein speizifischer Drucker sein soll, dann musst du das "*PDF*" entsprechend detaillieren.
In deinem Codebeispiel eingebaut schaut das so aus
Dim Drucker As String
Drucker = Application.ActivePrinter
Call PDF_Drucker_als_Standarddrucker
Range("$B$3:Total").Select
Selection.PrintOut
'wozu bitte soll das gut sein ?
'Das macht doch nur Sinn wenn eine UF aktiv ist.
Unload Me
Application.ActivePrinter = Drucker
End Sub
Wenn du den Drucker bzw. den anschluss genau kennst, den PDF-Drucker mal als aktiven setzen und dann gib mal im direktfenster des VB-Editors ein
Debug.Print ActivePrinter
Dann kommt sowas raus
Adobe PDF auf Ne05:
Dann kannst du den Drucker auch mit einer einfachen Codezeile umsetzen
Application.Activeprinter = "Adobe PDF auf Ne05:"
In deinem Codebeispiel sähe es dann so aus
Dim Drucker As String
Drucker = Application.ActivePrinter
Application.Activeprinter = "Adobe PDF auf Ne05:"
Range("$B$3:Total").Select
Selection.PrintOut
Unload Me
Application.ActivePrinter = Drucker
End Sub
Das wäre der einfachste Weg,... aber wie gesagt. Die Anschlüsse können variieren und sind nicht immer gleich weil Windows die Drucker selbst verwaltet.
Gruss Rainer
Anzeige
Drucker auswählen
01.08.2010 13:32:45
Anton
Hallo Benedikt,
teste mal:
  Dim Drucker As String
Drucker = Application.ActivePrinter
Range("$B$3:Total").PrintOut ActivePrinter:="Aloaha PDF Drucker"
Unload Me
Application.ActivePrinter = Drucker
mfg Anton
Drucker auswählen, Danke euch allen
01.08.2010 19:33:09
Benedikt
Also bleibt mir nur ein grosses Dankeschön für eure Hilfe.
Die ausführliche Erklärungen von Ramses haben sehr geholfen, d.h. es funzte wie gehoft.
Da der Vorschlag von Anton sehr kurz und für mich am besten lesbar war und zudem funktioniert hat, ist dieser mein Favorit.
Vielen lieben Dank euch allen für eure Zeit und Geduld.
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Drucker in Excel auswählen und verwalten


Schritt-für-Schritt-Anleitung

Um in Excel den Drucker auszuwählen und direkt über VBA zu steuern, kannst du folgende Schritte befolgen:

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Modul einfügen: Klicke mit der rechten Maustaste auf dein Projekt im Projekt-Explorer, gehe zu Einfügen und wähle Modul.

  3. Code einfügen: Füge den folgenden Code in das Modul ein:

    Sub DruckerAuswählen()
        Dim Drucker As String
        Drucker = Application.ActivePrinter ' Aktuellen Drucker speichern
    
        ' Drucker ändern
        Application.ActivePrinter = "Aloaha PDF Drucker"
    
        ' Bereich drucken
        Range("$B$3:Total").PrintOut
    
        ' Zurücksetzen auf den ursprünglichen Drucker
        Application.ActivePrinter = Drucker
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.


Häufige Fehler und Lösungen

  • Fehler: "Drucker konnte nicht gefunden werden."

    • Lösung: Stelle sicher, dass der Druckername korrekt ist und der Drucker angeschlossen ist. Du kannst die verfügbaren Drucker mit Application.Printers auflisten.
  • Fehler: "Drucker ist nicht verfügbar."

    • Lösung: Überprüfe, ob der Drucker im Windows-Drucker-Manager als Standarddrucker festgelegt ist.

Alternative Methoden

Eine einfachere Methode, um den Drucker auszuwählen, ist die Verwendung eines Dialogfeldes:

Sub DruckerDialog()
    Application.Dialogs(9).Show ' Druckerdialog anzeigen
    Range("$B$3:Total").PrintOut ' Auswahl drucken
End Sub

Praktische Beispiele

  1. Drucker ohne Dialogfeld auswählen:

    Sub PDFDrucken()
        Dim Drucker As String
        Drucker = Application.ActivePrinter
        Application.ActivePrinter = "Adobe PDF"
        Range("$B$3:Total").PrintOut
        Application.ActivePrinter = Drucker ' Ursprünglichen Drucker zurücksetzen
    End Sub
  2. Drucker mit Variable:

    Sub DruckerMitVariable()
        Dim DruckerName As String
        DruckerName = "Aloaha PDF Drucker"
        Application.ActivePrinter = DruckerName
        Selection.PrintOut
    End Sub

Tipps für Profis

  • Nutze Debug.Print Application.ActivePrinter, um den aktuell aktiven Drucker im Direktfenster anzuzeigen. Dies hilft dir, den genauen Namen des Druckers zu ermitteln.
  • Du kannst auch die WSHNetwork-Objekte verwenden, um Drucker dynamisch auszuwählen, was besonders nützlich ist, wenn mehrere Drucker im Netzwerk vorhanden sind.

FAQ: Häufige Fragen

1. Wie kann ich den Standarddrucker in Excel festlegen? Um den Standarddrucker in Excel festzulegen, kannst du den Befehl Application.ActivePrinter = "Druckername" verwenden, wobei "Druckername" der Name deines gewünschten Druckers ist.

2. Funktioniert dieser Code in allen Excel-Versionen? Ja, der bereitgestellte VBA-Code sollte in den meisten Versionen von Excel funktionieren, jedoch kann die Benennung der Drucker je nach Windows-Version variieren. Achte darauf, den korrekten Namen zu verwenden.

3. Kann ich mehrere Drucker in einem Makro verwenden? Ja, du kannst in einem Makro mehrere Drucker ansprechen, indem du verschiedene Application.ActivePrinter-Zuweisungen vornimmst und die entsprechenden Druckaufträge durchführst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige