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

Forumthread: Druckerauswahl anzeigen

Druckerauswahl anzeigen
12.10.2005 09:16:45
Mark
Hallo Leute
ich habe ein kleines Problem. Ich will per VBA eine Druckerauswahl angezeigt bekommen. Ich habe das auch schonmal gesehen bzw gemacht, aber ich krieg es einfach nicht mehr hin.
Ich will nicht den Dialog angezeigt bekommen, der kommt, wenn ich auf Datei/Drucken gehe. also nicht: Application.Dialogs(xlDialogPrint).Show
Es gibt doch auch noch eine andere Möglichkeit die Drucker auszuwählen oder irre ich mich jetzt total?
Danke für eure Hilfe
ciao Mark
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Druckerauswahl anzeigen
12.10.2005 09:20:32
Heiko
Hallo Mark,
suchst du sowas ?!

Private Sub CommandButton5_Click()
Dim strPrinterName As String
strPrinterName = Application.ActivePrinter
Application.Dialogs(xlDialogPrinterSetup).Show
' Hier den PrintOut befehl
ActiveSheet.PrintOut
Application.ActivePrinter = strPrinterName
End Sub

Gruß Heiko

PS: Rückmeldung wäre nett !
Anzeige
AW: Druckerauswahl anzeigen
12.10.2005 09:48:16
Mark
Genau das meinte ich.
Vielen Dank
Mark
AW: Druckerauswahl anzeigen
12.10.2005 13:18:23
der.dan
Hallo.
Habe eben glücklicherweise den Beitrag gefunden und gleich mal in die Tat umgesetzt.
An und für sich funktioniert die Funktion auch so wie sie soll, nur habe ich dummerweise jetzt ein Problem: Wenn die Box zum auswählen des Druckers angezeigt wird und "Abbrechen" gedrückt wird, so wird trotzdem der Druckvorgang gestartet...
Jetzt hoffe ich mal wieder auf Hilfe...
Hier mal der Code:

Private Sub CommandButtonPRINT_click()
Dim strPinterName As String
strPrinterName = Application.ActivePrinter
Application.Dialogs(xlDialogPrinterSetup).Show
If Worksheets("Montag").Visible = True Then
Worksheets("Montag").PrintOut
End If
If Worksheets("Dienstag").Visible = True Then
Worksheets("Dienstag").PrintOut
End If
If Worksheets("Mittwoch").Visible = True Then
Worksheets("Mittwoch").PrintOut
End If
If Worksheets("Donnerstag").Visible = True Then
Worksheets("Donnerstag").PrintOut
End If
If Worksheets("Freitag").Visible = True Then
Worksheets("Freitag").PrintOut
End If
If Worksheets("Samstag").Visible = True Then
Worksheets("Samstag").PrintOut
End If
If Worksheets("Sonntag").Visible = True Then
Worksheets("Sonntag").PrintOut
End If
Application.ActivePrinter = strPrinterName
End Sub

mfg, Dan
Anzeige
Nachtrag
12.10.2005 14:51:11
der.dan
Habe noch eine Feststellung vergessen: Egal welchen Drucker in dann in der Dialogbox auswähle, gedruckt wird immer auf dem Standartdrucker...
Gruß, Dan
AW: Nachtrag
12.10.2005 15:26:42
Heiko
Hallo Dan,
dann halt so:

Sub Drucken1()
Dim strPrinterName As String
Dim varRueckgabe As Variant
strPrinterName = Application.ActivePrinter
varRueckgabe = Application.Dialogs(xlDialogPrinterSetup).Show
If varRueckgabe = "Falsch" Then Exit Sub
' Hier den PrintOut befehl
ActiveSheet.PrintOut
Application.ActivePrinter = strPrinterName
End Sub

Gruß Heiko

PS: Rückmeldung wäre nett !
Anzeige
AW: Nachtrag
12.10.2005 15:45:47
der.dan
Hallo Heiko.
Danke für Deine Antwort. Habe sie selbstverständlich direkt in die Tat umgesetzt. Und siehe da: Es funktioniert! :-)
Womit das Problem eigentlich gelöst wäre... Wenn sich hieraus nicht noch eine neue Frage entwickelt hätte: Ich habe hier vier Drucker eingerichtet - einer davon zum erstellen von *.pdf-Dokumenten. Wenn ich nun mittels VBA drucke, erhalte ich pro aktivem (=angezeigtem) Blatt einen einzelnen Druckauftrag, und somit auch entsprechend viele pdfs...
Schön wäre es jedoch, alle Seiten fortlaufend zu erhalten, was bedeuten würde, dass nicht pro Blatt ein Druckauftrag angestoßen wird, sondern insgesamt nur ein einziger Auftrag gestartet wird.
Vielleicht fällt Dir ja hierzu auch noch eine Lösung ein.
Der Vollständigkeit halber hier der aktuelle, funktionierende Code:

Private Sub CommandButtonPRINT_click()
Dim strPinterName As String
Dim varRueckgabe As Variant
strPrinterName = Application.ActivePrinter
varRueckgabe = Application.Dialogs(xlDialogPrinterSetup).Show
If varRueckgabe = "Falsch" Then Exit Sub
Application.ScreenUpdating = False
If Worksheets("Montag").Visible = True Then
Worksheets("Montag").PrintOut
End If
If Worksheets("Dienstag").Visible = True Then
Worksheets("Dienstag").PrintOut
End If
If Worksheets("Mittwoch").Visible = True Then
Worksheets("Mittwoch").PrintOut
End If
If Worksheets("Donnerstag").Visible = True Then
Worksheets("Donnerstag").PrintOut
End If
If Worksheets("Freitag").Visible = True Then
Worksheets("Freitag").PrintOut
End If
If Worksheets("Samstag").Visible = True Then
Worksheets("Samstag").PrintOut
End If
If Worksheets("Sonntag").Visible = True Then
Worksheets("Sonntag").PrintOut
End If
Application.ScreenUpdating = True
Application.ActivePrinter = strPrinterName
End Sub

Gruß, Dan
Anzeige
AW: Nachtrag
13.10.2005 07:37:01
Heiko
Moin Dan,
versuche es mal nach diesem Motto, da ich aber keine PDF Writer habe kann ich es nicht testen aber normal drucken tut er so schon mal.

Sub Makro1()
Dim wksSheets() As String
Dim intcounter As Integer
intcounter = 0
If Worksheets("Tabelle1").Visible = True Then
ReDim Preserve wksSheets(intcounter)
wksSheets(intcounter) = "Tabelle1"
intcounter = intcounter + 1
End If
If Worksheets("Tabelle2").Visible = True Then
ReDim Preserve wksSheets(intcounter)
wksSheets(intcounter) = "Tabelle2"
intcounter = intcounter + 1
End If
If Worksheets("Tabelle3").Visible = True Then
ReDim Preserve wksSheets(intcounter)
wksSheets(intcounter) = "Tabelle3"
intcounter = intcounter + 1
End If
' Und so weiter bis Tabelle 7 (bzw. Sonntag)
Sheets(wksSheets).PrintOut
End Sub

Gruß Heiko

PS: Rückmeldung wäre nett !
Anzeige
AW: Nachtrag
14.10.2005 07:32:35
der.dan
Guten Morgen Heiko.
Spitze! Jetzt klappt das auch. Ist nur irgendwie ein wenig langsam... Hm...
Egal - Geschwindigkeit kommt später, hauptsache das funktioniert erstmal!
Also: Vielen Dank für Deine Hilfe und einen geruhsamen Freitag.
Gruß, Dan
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Druckerauswahl in Excel mit VBA


Schritt-für-Schritt-Anleitung

Um eine Druckerauswahl in Excel mithilfe von VBA anzuzeigen, befolge diese Schritte:

  1. Öffne den VBA-Editor in Excel mit ALT + F11.

  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (deine Datei)" > Einfügen > Modul.

  3. Kopiere den folgenden Code in das Modul:

    Sub Druckerauswahl()
       Dim strPrinterName As String
       strPrinterName = Application.ActivePrinter
       If Application.Dialogs(xlDialogPrinterSetup).Show = False Then Exit Sub
       ActiveSheet.PrintOut
       Application.ActivePrinter = strPrinterName
    End Sub
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Du kannst jetzt das Makro Druckerauswahl ausführen, um die Druckerauswahl anzuzeigen.


Häufige Fehler und Lösungen

Problem: Der Druckvorgang startet, obwohl "Abbrechen" gewählt wurde.
Lösung: Stelle sicher, dass dein Code die Rückgabe des Dialogs überprüft. Hier ein Beispiel:

Dim varRueckgabe As Variant
varRueckgabe = Application.Dialogs(xlDialogPrinterSetup).Show
If varRueckgabe = False Then Exit Sub

Problem: Gedruckt wird immer auf dem Standarddrucker.
Lösung: Überprüfe, ob Application.ActivePrinter korrekt gesetzt ist, bevor du PrintOut aufrufst.


Alternative Methoden

Wenn du nicht den Dialog zum Auswählen des Druckers verwenden möchtest, kannst du auch direkt einen Drucker in deinem Code angeben:

Sub DirektDrucken()
    Application.ActivePrinter = "Dein Druckername"
    ActiveSheet.PrintOut
End Sub

Ersetze "Dein Druckername" durch den Namen des Druckers, den du verwenden möchtest.


Praktische Beispiele

Hier sind einige Beispiele, wie du die Druckerauswahl in verschiedenen Szenarien verwenden kannst:

  1. Drucken mehrerer Blätter:

    Sub MehrereBlätterDrucken()
       Dim strPrinterName As String
       strPrinterName = Application.ActivePrinter
       If Application.Dialogs(xlDialogPrinterSetup).Show = False Then Exit Sub
    
       Dim ws As Worksheet
       For Each ws In ThisWorkbook.Worksheets
           If ws.Visible = xlSheetVisible Then
               ws.PrintOut
           End If
       Next ws
       Application.ActivePrinter = strPrinterName
    End Sub
  2. Drucken als PDF:

    Um alle aktiven Blätter als ein PDF-Dokument zu drucken, kannst du folgenden Code verwenden:

    Sub DruckAlsPDF()
       Dim strPrinterName As String
       strPrinterName = Application.ActivePrinter
       Application.ActivePrinter = "Microsoft Print to PDF"
    
       Dim ws As Worksheet
       Dim wksSheets() As String
       Dim intCounter As Integer
       intCounter = 0
    
       For Each ws In ThisWorkbook.Worksheets
           If ws.Visible = xlSheetVisible Then
               ReDim Preserve wksSheets(intCounter)
               wksSheets(intCounter) = ws.Name
               intCounter = intCounter + 1
           End If
       Next ws
    
       Sheets(wksSheets).PrintOut
       Application.ActivePrinter = strPrinterName
    End Sub

Tipps für Profis

  • Verwende Application.ScreenUpdating = False, um das Flackern des Bildschirms während des Druckvorgangs zu vermeiden.
  • Du kannst die Druckereinstellungen vor dem Drucken anpassen, indem du die Eigenschaften von ActiveSheet.PageSetup änderst.
  • Nutze die vba printout activeprinter Funktion für spezifische Druckaufträge, wenn du mehrere Drucker in deinem Setup hast.

FAQ: Häufige Fragen

1. Wie kann ich den Standarddrucker programmgesteuert ändern?
Du kannst den Standarddrucker mit Application.ActivePrinter = "Druckername" ändern. Stelle sicher, dass der Druckername exakt ist.

2. Gibt es eine Möglichkeit, eine Druckerauswahl ohne Dialogfeld zu implementieren?
Ja, du kannst direkt einen Drucker in deinem VBA-Code angeben, ohne das Dialogfeld anzuzeigen. Beachte, dass dies weniger flexibel ist.

3. Welches Excel-Format wird für VBA-Drucker ausgewählt?
Diese Beispiele sind für Excel 2010 und neuere Versionen geeignet.

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