Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

"Application.ActivePrinter"-Problem

Forumthread: "Application.ActivePrinter"-Problem

"Application.ActivePrinter"-Problem
31.07.2008 17:21:00
Bernd
Hallo,
Dank dieses Forums habe ich eine EINGABEMASKE in Betrieb genommen, mit welcher ich Angebote, Auftragsbestätigungen und Rechnungen erstellen und ausdrucken kann. Erstellte Angebote, Aufträge oder Rechnungen werden von drei verschiedenen PCs erstellt, gespeichert, gedruckt etc.
An allen PCs ist der gleiche LowBudget-Drucker angeschlossen ... der Samsung CLP-300.
An zwei Rechner funktioniert nachstehende Befehlszeile:
Application.ActivePrinter = "Samsung CLP-300 Series auf Ne00:"
An einem Rechner nicht:
Es müßte dort "Samsung CLP-300 Series auf Ne04" heißen (per Makro-Recorder ermittelt).
Was gibt es da für Möglichkeiten, so daß meine Eingabemaske.xls IMMER auf den direkt angeschlossenen Standard-Drucker eines jeden PCs druckt?
Es grüßt
Bernd Junker
PS 1: Hier mal ein Auszug des Moduls "DRUCKEN", welches per Button gestartet wird:

Sub Drucken()
Dim objWks As Worksheet, strAktiverDrucker As String, objZelleKopie As Range
Dim lngFarbeKopie As Long
On Error GoTo Fehler
Set objWks = Worksheets("Angebot")
Set objZelleKopie = objWks.Range("F26") 'Zelle zur Kennzeichnung der Kopie
lngFarbeKopie = objZelleKopie.Interior.ColorIndex 'Originalfarbe merken
'Drucken
strAktiverDrucker = Application.ActivePrinter 'aktiven Druckermerken
'Drucker für Ausgabe setzen, falls nicht der Aktive Drucker genommen werden soll
Application.ActivePrinter = "Samsung CLP-300 Series auf Ne00:"
If objWks.Shapes("Kontrollkästchen 5").ControlFormat.Value = 1 Then
'Kunden-Exemplar
'   objWks.PrintPreview
objWks.PrintOut
End If
'FarbeZelle zurücksetzen
If Not objZelleKopie Is Nothing Then
objZelleKopie.Interior.ColorIndex = lngFarbeKopie
objZelleKopie.MergeArea.ClearContents
End If
'Drucker zurücksetzen
If strAktiverDrucker  "" Then Application.ActivePrinter = strAktiverDrucker
End Sub


PS 2: Und hier das gesamte Modul "DRUCKEN", welches per Button gestartet wird:
Option Explicit


Sub Drucken()
Dim objWks As Worksheet, strAktiverDrucker As String, objZelleKopie As Range
Dim lngFarbeKopie As Long
On Error GoTo Fehler
Set objWks = Worksheets("Angebot")
Set objZelleKopie = objWks.Range("F26") 'Zelle zur Kennzeichnung der Kopie
lngFarbeKopie = objZelleKopie.Interior.ColorIndex 'Originalfarbe merken
'Drucken
strAktiverDrucker = Application.ActivePrinter 'aktiven Druckermerken
'Drucker für Ausgabe setzen, falls nicht der Aktive Drucker genommen werden soll
Application.ActivePrinter = "Samsung CLP-300 Series auf Ne00:"
If objWks.Shapes("Kontrollkästchen 5").ControlFormat.Value = 1 Then
'Kunden-Exemplar
'   objWks.PrintPreview
objWks.PrintOut
End If
If objWks.Shapes("Kontrollkästchen 25").ControlFormat.Value = 1 Then
'Kopie - Kunde
objZelleKopie = "K O P I E"
'   objWks.PrintPreview
objWks.PrintOut
End If
If objWks.Shapes("Kontrollkästchen 8").ControlFormat.Value = 1 Then
'Kopie - Produktion
objZelleKopie.Interior.ColorIndex = 6 'gelb
objZelleKopie = "KOPIE - Produktion"
'   objWks.PrintPreview
objWks.PrintOut
End If
If objWks.Shapes("Kontrollkästchen 29").ControlFormat.Value = 1 Then
'Kopie - Produktion
objZelleKopie.Interior.ColorIndex = 3 'rot
objZelleKopie = "KOPIE - Tourenplanung"
'   objWks.PrintPreview
objWks.PrintOut
End If
If objWks.Shapes("Kontrollkästchen 28").ControlFormat.Value = 1 Then
'Kopie - Produktion
objZelleKopie.Interior.ColorIndex = 40 'hellgrau
objZelleKopie = "KOPIE - Ablage/Koffer"
'   objWks.PrintPreview
objWks.PrintOut
End If
If objWks.Shapes("Kontrollkästchen 31").ControlFormat.Value = 1 Then
'Kopie - Produktion
objZelleKopie.Interior.ColorIndex = 4 'grün
objZelleKopie = "KOPIE - Provisionsabrechn."
'   objWks.PrintPreview
objWks.PrintOut
End If
If objWks.Shapes("Kontrollkästchen 32").ControlFormat.Value = 1 Then
'Kopie - Produktion
objZelleKopie.Interior.ColorIndex = 4 'grün
objZelleKopie = "KOPIE - Steuerberater"
'   objWks.PrintPreview
objWks.PrintOut
End If
If objWks.Shapes("Kontrollkästchen 34").ControlFormat.Value = 1 Then
'Kopie - Produktion
objZelleKopie.Interior.ColorIndex = 4 'grün
objZelleKopie = "KOPIE - Zahlungsverkehr"
'   objWks.PrintPreview
objWks.PrintOut
End If
If objWks.Shapes("Kontrollkästchen 6").ControlFormat.Value = 1 Then
'Kopie - Vertrieb
objZelleKopie.Interior.ColorIndex = 37 'hellblau
objZelleKopie = "KOPIE - Vertrieb"
'   objWks.PrintPreview
objWks.PrintOut
End If
If objWks.Shapes("Kontrollkästchen 36").ControlFormat.Value = 1 Then
'Kopie - Vertrieb
objZelleKopie.Interior.ColorIndex = 33 'blau
objZelleKopie = "KOPIE - Lieferschein etc."
'   objWks.PrintPreview
objWks.PrintOut
End If
If objWks.Shapes("Kontrollkästchen 7").ControlFormat.Value = 1 Then
'Exemplar - Allgemeine Ablage
objZelleKopie.Interior.ColorIndex = 33 'blau
objZelleKopie = "KOPIE - Gesamt-Ordner"
'   objWks.PrintPreview
objWks.PrintOut
End If
'  If objWks.Shapes("Kontrollkästchen 75").ControlFormat.Value = 1 Then
'    'PDF-Datei erstellen
'    'FarbeZelle zurücksetzen
'    objZelleKopie.Interior.ColorIndex = lngFarbeKopie
'    objZelleKopie.MergeArea.ClearContents
'    'PDF-Drucker auswählen
'    Application.ActivePrinter = "Acrobat PDFWriter auf LPT1:"
'    objWks.PrintOut
'  End If
Fehler:
If Err.Number  0 Then
If Err.Number = 1004 Then
'do nothing
Else
MsgBox "Fehler Nr. " & Err.Number & " ist aufgetreten!" & vbLf & Err.Description
End If
End If
'FarbeZelle zurücksetzen
If Not objZelleKopie Is Nothing Then
objZelleKopie.Interior.ColorIndex = lngFarbeKopie
objZelleKopie.MergeArea.ClearContents
End If
'Drucker zurücksetzen
If strAktiverDrucker  "" Then Application.ActivePrinter = strAktiverDrucker
End Sub


Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: "Application.ActivePrinter"-Problem
31.07.2008 17:56:00
Bernd
Danke für die fixe Antwort.
Allerdings sehe ich vor lauter Bäume keinen Wald, da ich mit "Level: Excel gut - VBA bescheiden" wirklich meinte, daß VBA bei mir bescheiden ist. "Bescheiden" heißt bei mir "nahe Null". ;-)
Kannst Du mir vielleicht extwas detailliertere erklären, WAS ich WO ändern muß?
DANKE ... und schöne Grüße
Junker

Anzeige
AW: "Application.ActivePrinter"-Problem
31.07.2008 18:13:46
ChrisL
Hallo Bernd
Mal was anderes, du schreibst...
Was gibt es da für Möglichkeiten, so daß meine Eingabemaske.xls IMMER auf den direkt angeschlossenen Standard-Drucker eines jeden PCs druckt?
Wenn man auf die Printer Definition ganz verzichtet, dann geht der Druck automatisch immer auf den "Standard" Drucker. Vielleicht verstehst du unter "Standard" etwas anderes ;)
Und sonst, falls die Lösung nicht super flexibel sein muss, dann könntest du für die beiden User eine Ausnahmeregel definieren z.B. Windows Benutername abfragen...
If Environ("Username") = "Spezialuser1" Or Environ("Username") = "Spezialuser2" Then
Application.ActivePrinter = "Samsung CLP-300 Series auf Ne04:"
Else
Application.ActivePrinter = "Samsung CLP-300 Series auf Ne00:"
End If
Gruss
Chris

Anzeige
AW: "Application.ActivePrinter"-Problem
31.07.2008 23:50:00
Uduuh
Hallo,

Wenn man auf die Printer Definition ganz verzichtet, dann geht der Druck automatisch immer auf den "Standard" Drucker. 


Aber nicht, wenn der User vorher mal auf einen anderen Drucker gedruckt hat. Dann ist dieser der ActivePrinter und dort gehen die Drucke hin.
Gruß aus’m Pott
Udo

Anzeige
AW: "Application.ActivePrinter"-Problem
01.08.2008 08:58:00
Bernd
Hallo Chris,
der Standard-Drucker ist für mich der Drucker, der in der Systemsteuerung unter "Drucker und Faxgeräte" als Standard definiert ist.
Mit User bzw. Windows-Benutzernamen hat das bei mir aber nichts zu tun, denn an jedem PC arbeitet hier auch nur eine Person. Es loggen sich folglich keine unterschiedlichen Personen mit unterschiedlichen Usernamen ein.
Interessant:
Gestern hieß der Standard-Drucker an meinem "Problem-PC" noch "Samsung CLP-300 Series auf Ne04:".
Seit heute morgen jedoch "... auf Ne00:".
So sollte es auch sein. In meiner EIGABEMASKE.xls steht "... Ne00:" und an jedem PC kann dann auch ordentlich gearbeitet werden, wenn der Drucker auch an jedem PC mit " ... Ne00:" angesprochen werden kann.

Anzeige
AW: "Application.ActivePrinter"-Problem
01.08.2008 11:35:58
ChrisL
Hallo Bernd und Jörg
Also wegen "Standard" muss ich zurück krebsen. Jörg hat natürlich recht, ganz sicher ist mein Vorschlag, auf die Printerdefinition ganz zu verzichten, nicht.
Dass die Drucker über Nacht eine Namensänderung erfahren, scheint ein Mysterium.
Jedenfalls stehen bis jetzt zwei Möglichkeiten zur Auswahl. Entweder liest du den Drucker aus System, ist sicher die beste Lösung, aber da muss man sich in den angegebenen Beitrag einlesen.
Die andere Lösung ist nicht ganz so gut, aber ginge halt m.E. sehr einfach. Windows-Benuter Name dient lediglich zur Erkennung der beiden Problem-PC's, wie du sagst sitzen die beiden User immer am gleichen PC. Setzt natürlich voraus, dass sich die Bezeichnungen nicht täglich ändern.
gruss
chris
Anzeige
;
Anzeige

Infobox / Tutorial

Anwendung des ActivePrinter in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und gehe zu dem VBA-Editor, indem du Alt + F11 drückst.

  2. Füge ein neues Modul hinzu: Rechtsklicke auf einen Eintrag im Projektfenster und wähle Einfügen > Modul.

  3. Kopiere den folgenden Code in das Modul:

    Sub Drucken()
       Dim objWks As Worksheet
       Dim strAktiverDrucker As String
       On Error GoTo Fehler
    
       Set objWks = Worksheets("Angebot")
       strAktiverDrucker = Application.ActivePrinter 'Aktiven Drucker merken
    
       'Drucker für Ausgabe setzen
       Application.ActivePrinter = "Samsung CLP-300 Series auf Ne00:"
       objWks.PrintOut
    
       'Drucker zurücksetzen
       Application.ActivePrinter = strAktiverDrucker
       Exit Sub
    
    Fehler:
       MsgBox "Fehler Nr. " & Err.Number & " ist aufgetreten!" & vbLf & Err.Description
    End Sub
  4. Passe den Druckernamen an, falls erforderlich. Du kannst den aktiven Drucker mit Application.ActivePrinter ermitteln und entsprechend ändern.

  5. Starte das Makro, um das Dokument zu drucken.


Häufige Fehler und Lösungen

  • Fehler: "Drucker nicht gefunden"
    Lösung: Überprüfe den Namen des Druckers in der Systemsteuerung unter "Drucker und Faxgeräte". Stelle sicher, dass der Name genau übereinstimmt.

  • Problem mit "ActivePrinter"
    Wenn du an einem PC einen anderen Drucker als Standard hast, kann das Makro nicht wie gewünscht funktionieren. Stelle sicher, dass der Drucker an jedem PC gleich benannt ist.

  • VBA gibt Fehler aus
    Wenn der Druckbefehl nicht funktioniert, kann das an falschen Rechten liegen. Stelle sicher, dass du die notwendigen Berechtigungen hast, um auf den Drucker zuzugreifen.


Alternative Methoden

  • Verzichte auf die Druckerdefinition: Wenn du das Makro so schreibst, dass es keinen spezifischen Drucker definiert, wird automatisch der Standard-Drucker verwendet. Dies kann die Flexibilität erhöhen:

    Sub Drucken()
       Dim objWks As Worksheet
       Set objWks = Worksheets("Angebot")
       objWks.PrintOut
    End Sub
  • Benutzernamen abfragen: Du kannst unterschiedliche Drucker für verschiedene Benutzer definieren, wie im folgenden Beispiel:

    If Environ("Username") = "Spezialuser1" Then
       Application.ActivePrinter = "Samsung CLP-300 Series auf Ne04:"
    Else
       Application.ActivePrinter = "Samsung CLP-300 Series auf Ne00:"
    End If

Praktische Beispiele

  • Drucken aus einer bestimmten Arbeitsmappe:

    Sub DruckenAusMappe()
       Dim wb As Workbook
       Set wb = Workbooks.Open("C:\Pfad\zu\deiner\Datei.xlsx")
       wb.Sheets("Angebot").PrintOut
       wb.Close
    End Sub
  • Drucken und Vorschau kombinieren: Wenn du eine Vorschau vor dem Drucken sehen möchtest, kannst du PrintPreview hinzufügen:

    Sub DruckenMitVorschau()
       Dim objWks As Worksheet
       Set objWks = Worksheets("Angebot")
       objWks.PrintPreview ' Vorschau anzeigen
       objWks.PrintOut ' Dann drucken
    End Sub

Tipps für Profis

  • Verwende On Error Resume Next für eine bessere Fehlerbehandlung, wenn du sicherstellen willst, dass der Druck auch bei einem Fehler fortgesetzt wird.

  • Testen der Drucker: Bevor du die Druckfunktion in einem produktiven Umfeld verwendest, teste sie mit verschiedenen Benutzern und Druckern, um sicherzustellen, dass alles reibungslos funktioniert.

  • Speicherung des aktiven Druckers: Vergiss nicht, den ursprünglichen Drucker zurückzusetzen, um die Benutzererfahrung nicht zu beeinträchtigen.


FAQ: Häufige Fragen

1. Warum funktioniert Application.ActivePrinter nicht?
Manchmal wird der Drucker in Windows umbenannt oder es gibt unterschiedliche Druckerkonfigurationen, die zu Problemen führen können. Überprüfe die Druckereinstellungen.

2. Was, wenn ich mehrere Drucker habe?
Du kannst eine Logik implementieren, die auf den Benutzernamen oder den PC-Namen basiert, um den richtigen Drucker auszuwählen.

3. Welche Excel-Version benötige ich für diese VBA-Skripte?
Die Skripte sollten in den meisten aktuellen Excel-Versionen funktionieren, die VBA unterstützen (z.B. Excel 2010 und höher).

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