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

Druckeinstellungen per VBA

Forumthread: Druckeinstellungen per VBA

Druckeinstellungen per VBA
12.05.2021 21:51:10
Thomas
Guten Abend,
ich probe seit längerem an Druckereinstellungen mit VBA herum. Man erreicht damit vieles nur das Beidseitig drucken deaktivieren kostet Nerven.
Ich habe ein Makro geschrieben weil ich Worksheet habe das über zwei Seiten gross ist und grösser. Beim drucken habe ich je nach welchen Teil ich damit ausdrucken will verschiedene Einstellungen. das geht mal über den Druckbereich, Zeilen und Blatt quer oder hoch. Kann ich alles tip top programmieren.
Nun gibt es heute ja so Intelligente Drucker die mit Duplexeinheiten bestückt sind und die Druckertreiber Standard auf zwei Seiten drucken eingestellt sind.
es ist Mühsam jedes mal zuerst den Druckertreiben zu öffnen um die Duplexeinstellung auf einseitig drucken zu stellen bevor ich das Makro starten kann.
Gibt es hierzu eine Lösung wo man den Duplex "auf beide Seiten drucken) deaktivieren kann und da wenn möglich auf verschiedenen Rechnern unter verschiedenen Drucker anzuwenden wäre?
Oder ist es wirklich so dass es unmöglich ist einen Druckertreiber im Duplexbereich über VBA zu beeinflussen?
Freundliche Grüsse
Thomas
Anzeige

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Druckeinstellungen per VBA
13.05.2021 10:33:39
Thomas
Danke, werde dem nachgehen..
AW: Druckeinstellungen per VBA
13.05.2021 12:20:25
Thomas
Nun ich habe das mal angesehen. Bei allem Respekt, das ist zu viel um das alles aus dem Ärmel geschüttelt verstehen zu können. Ich bin kein Informatiker.
Aber dieses API gesteuerte Konstrukt bringt mich schon auf Ideen.
ich brauchte nur eine Abfrage ob der angeschlossene Drucker ein Duplexdrucker ist und wenn ja, ob er auf einseitiges drucken eingestellt ist. Wenn nicht dann soll es diese Einstellung einseitiges drucken machen und dann soll es ab da weiter in meinem Makro gehen.
Wie kann ich sowas realisieren?
Anzeige
AW: Druckeinstellungen per VBA
13.05.2021 21:37:09
Yal
Hallo Thomas,
kein Stress. Es ist nicht so kompliziert, wie es aussieht.
Aus dem gegeben Posting kopierst Du das gesamte Inhalt der zweite Kasten in einem Modul, den Du in "PrintAPI" umbenennst.
Da aber das Forum-Software unglückliche Zeilentrennung erzeugt (ehemalige Version), habe ich diese korrigiert und extrahiert
https://www.herber.de/bbs/user/146166.txt
Benenne diese Datei in "PrintAPI.bas" und importiere sie in deinem Excel. Es sollte daraus ein Modul PrintAPI entstehen.
Dann kannst Du in deinen Code prüfen, ob der active Printer Duplex hat, und wenn ja, dann ausschalten:

If PrintAPI.GetDuplex(Application.ActivePrinter) Then
PrintAPI.SetDuplex Application.ActivePrinter, 0
End If
VG
Yal
Anzeige
AW: Druckeinstellungen per VBA
13.05.2021 22:21:28
Thomas
Guten Abend Yal,
besten Dank für deine Bemühung. Ich staune immer wieder.
Jetzt aber bitte ganz langsam, ich habe noch ein paar Fragen.
Diese Daten die ich aus dem TXT kopiere, wohin muss ich diese kopieren? In eine Excel Datei und diese dort in ein Modul das ich dann auch gleich PrintAPI benenne? Und was muss ich dann machen? Diese Excel Datei in ein PrintAPI.bas speichern?
Und dann muss ich in der Excel Datei wo ich das gebrauche dieses dann importieren?
Habe ich das richtig verstanden oder schon falsch gemacht?
Also so habe ich es mal probiert.
Es gibt dabei einige Probleme: Attribute VB_Name = "PrintAPI" Das steht in der TXT ja ganz zuoberst. Wenn ich dises Datei speichere dann verursachst dieses eine Fehlermeldung. Und dieses .bas das gibt es bei mir in Excel nicht. Ich versuchte dann diese Datei zuerst unter xlsm abzuspeichern und danach habe ich dann die ganze Datei nach PrintAPI.bas unbenennt. versuchte das dann in eine andere Excel Datei zu importieren. Aber das verursacht auch nur ein Fehler :-(
Was mache ich da konkret denn falsch?
Es grüsst
Thomas
Anzeige
AW: Druckeinstellungen per VBA
13.05.2021 22:34:55
Yal
Hallo Thomas,
_ die Datei runterladen und speichern
_ die Datei in "PrintAPI.bas" ändern
_ dein Excel-Datei öffnen
_ VB-Editor (Alt+F11) öffnen
_ auf dem VBAProjekt (projekt-Explorer links, wenn nicht geöffnet Strg+r), Rechtsklick und "Datei importieren..." auswählen
_ Datei "PrintAPI.bas"
und schon hast eine Module mti der Name "PrintAPI".
Jetzt kannst Du, in einem anderen Modul (PrintAPI sollte nicht angefasst werden) das Coding texten, den ich vorher gegeben habe.
VG
Yal
Anzeige
AW: Druckeinstellungen per VBA
14.05.2021 08:21:10
Thomas
Guten Morgen Yal,
ich hab es dann doch noch hingekriegt danke. Und besten Dank für diese tolle Lösung.
Anbei ich habe jetzt noch ein Schönheitsfehler drin. Kann man da auch noch etwas dagegen machen? Wenn jetzt der Duplex ausgeschaltet wird, dann schaltet es automatisch auf manuellen Blatteinzug um. Ich werde also aufgefordert den manuellen Blatteinzug mit Papier zu füttern. wenn ich aber im Druckertreiber selber den Duplex ausschalte dann passiert das nicht. Kann man da etwas dagegen machen im Programm?
Besten Dank nochmal für deine unkomplizierte und tolle Hilfe!
Anzeige
AW: Druckeinstellungen per VBA
14.05.2021 08:57:24
Thomas
Yal ich bin es gleich nochmal. Da habe ich mich zu Früh gefreut. Es geht doch nicht. Habe die Datei nochmal gestartet und habe es einfach nochmal ausprobiert. Die Duplexeinheit wird nicht ausgeschaltet der druckt froh und munter beidseitig :-( Keine Ahnung wo hier der Wurm drin ist.
Ich habe das mit dem Skript so.
Private Sub OB_Drucken_Click()
If OB_Legende.Value = True Then
'Legende drucken
Dim letztezeileL As String 'letzte Zeile suchen
letztezeileL = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
ActiveSheet.PageSetup.PrintArea = "$B$" & 1 & ":$E$" & letztezeileL
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.PrintTitleRows = "$10:$10" 'Zeilenwiederholung
.PrintTitleColumns = ""
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
'.PrintQuality = 600
.CenterHorizontally = True
.CenterVertically = False
.Orientation = xlPortrait
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = 100
.PrintErrors = xlPrintErrorsDisplayed
End With
'UserForm schliessen
Me.Hide
Application.PrintCommunication = True
'Collate: False= einseitiger Druck / True Dublex Druck
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=False, _
IgnorePrintAreas:=False
If PrintAPI.GetDuplex(Application.ActivePrinter) Then
PrintAPI.SetDuplex Application.ActivePrinter, 0
End If
Range("A1").Select
Kann es sein dass der Codeschnipsel woanders hingehört?
Es grüsst
Thomas
Anzeige
AW: Druckeinstellungen per VBA
14.05.2021 16:29:57
Yal
Hallo Martin,
Man könnte sich fragen: wenn man zuerst den Befehl zu drucken sendet und dann den Befehl, den Duplex auszuschalten sendet, dann könnte es sein, dass der Drucker, so schlau er auch sein mag, die Befehle in dieser Reihenfolge verarbeitet.
VG
Yal
AW: Druckeinstellungen per VBA
14.05.2021 17:34:49
Thomas
Gutem Abend Yal,
es ist ja so, dass egal wo ich diesen Codeschnipsel platziere
"If PrintAPI.GetDuplex(Application.ActivePrinter) Then
PrintAPI.SetDuplex Application.ActivePrinter, 0
End If"
Ganz am Anfang , zuletzt, oder zwischen rein, es geht nicht.
Es grüsst
Thomas
Anzeige
AW: Druckeinstellungen per VBA
14.05.2021 18:04:19
Thomas
Yal, ich habe das ganze jetzt mal neutralisiert.
Ich habe eine neue Datei aufgesetzt und nur das rein getan.

Sub Test()
If PrintAPI.GetDuplex(Application.ActivePrinter) Then
PrintAPI.SetDuplex Application.ActivePrinter, 0
End If
ActiveWindow.SelectedSheets.PrintOut
End Sub
Das Druckt beidseitig und ich kann es nicht ändern.
Ich kann das aber auch so machen

Sub Test()
ActiveWindow.SelectedSheets.PrintOut
If PrintAPI.GetDuplex(Application.ActivePrinter) Then
PrintAPI.SetDuplex Application.ActivePrinter, 0
End If
End Sub
Und auch das geht nicht
Es grüsst
Thomas
Anzeige
AW: Druckeinstellungen per VBA
14.05.2021 22:54:16
Thomas
Nun mit diesem Versuch
If PrintAPI.GetDuplex(Application.ActivePrinter) Then
MsgBox "ein"
End If
bin ich mir jetzt aber ganz sicher dass dieser API Codeschnipsel die Schnittstelle nicht anspricht...
Diese MsgBox müsste ja kommen wenn der Duplex eingeschaltet ist. Kommt aber auch nicht wenn er ausgeschaltet ist.
Null Reaktion.
Was kann hier nur Faul sein daran?
Anzeige
AW: Druckeinstellungen per VBA
14.05.2021 23:37:07
Yal
Hallo Martin,
Ja, es könnte das Problem sein, weil ich davon ausgegangen, dass diese Auswertung eine Werte liefert, die sich als Boolean zuordnen lässt.
Versuche:
Msgbox Vartype (PrintAPI.GetDuplex(Application.ActivePrinter))
Und danach
Msgbox PrintAPI.GetDuplex(Application.ActivePrinter)
In den 2 Situation mit und ohne voreingestellten Duplex.
Dann hast Du die Elemente, die man einbauen muss.
VG
Yal
Anzeige
AW: Druckeinstellungen per VBA
15.05.2021 11:22:41
Thomas
Guten Morgen Yal
also ehrlichgesagt bringt mich das Resultat kein Schritt weiter.
Schau bitte mal was da heraus kommt.

Sub Test()
'If PrintAPI.GetDuplex(Application.ActivePrinter) Then
' PrintAPI.SetDuplex Application.ActivePrinter, 0
' End If
'MsgBox PrintAPI.GetDuplex(Application.ActivePrinter)
MsgBox VarType(PrintAPI.GetDuplex(Application.ActivePrinter))  'Hier kommt eine 3 zurück bei beiden Optionen, einseitig drucken oder zweiseitig drucken.
MsgBox PrintAPI.GetDuplex(Application.ActivePrinter) 'Hier kommt eine 0 zurück bei beiden Optionen, einseitig drucken oder zweiseitig drucken.
'ActiveWindow.SelectedSheets.PrintOut
End Sub
Gruss
Thomas
Anzeige
;
Anzeige

Infobox / Tutorial

Druckeinstellungen per VBA anpassen


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke Alt + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.
  2. Modul erstellen: Klicke im Projekt-Explorer mit der rechten Maustaste auf dein Projekt und wähle "Einfügen" > "Modul".
  3. Code für Drucker API einfügen: Kopiere den Code aus der bereitgestellten Textdatei und füge ihn in das neue Modul ein. Benenne das Modul in PrintAPI um.
  4. Duplexeinstellungen prüfen: Verwende den folgenden Code, um zu prüfen, ob der Drucker Duplexdruck unterstützt. Wenn ja, setze den Druckmodus auf einseitig:
    If PrintAPI.GetDuplex(Application.ActivePrinter) Then
       PrintAPI.SetDuplex Application.ActivePrinter, 0
    End If
  5. Drucken: Füge den obigen Code in dein bestehendes Druckmakro ein, um sicherzustellen, dass der Duplexdruck deaktiviert wird.

Häufige Fehler und Lösungen

  • Duplexdruck bleibt aktiviert: Stelle sicher, dass der Code zur Deaktivierung des Duplexdrucks vor dem Druckbefehl ausgeführt wird. Wenn das Problem weiterhin besteht, überprüfe, ob der Druckertreiber korrekt installiert ist.

  • Fehlermeldungen bei der API: Wenn du beim Importieren der PrintAPI.bas Datei auf Fehler stößt, stelle sicher, dass die Datei korrekt heruntergeladen und umbenannt wurde.


Alternative Methoden

Wenn VBA für die Druckeinstellungen nicht die gewünschte Flexibilität bietet, kannst du auch die Druckeinstellungen manuell über die Windows 10 Druckeroptionen anpassen. Gehe dazu wie folgt vor:

  1. Öffne die "Einstellungen" und gehe zu "Geräte".
  2. Wähle "Drucker & Scanner" aus.
  3. Klicke auf deinen Drucker und dann auf "Verwalten".
  4. Wähle "Druckeinstellungen" und ändere die Duplexeinstellungen entsprechend.

Praktische Beispiele

Hier ist ein Beispiel, wie du ein Makro erstellen kannst, das die Druckeinstellungen automatisch anpasst und den einseitigen Druck als Standard festlegt:

Sub DruckeinstellungenAnpassen()
    If PrintAPI.GetDuplex(Application.ActivePrinter) Then
        PrintAPI.SetDuplex Application.ActivePrinter, 0
    End If

    ' Druckbereich festlegen
    ActiveSheet.PageSetup.PrintArea = "$A$1:$E$20"
    ActiveWindow.SelectedSheets.PrintOut
End Sub

Tipps für Profis

  • Druckeinstellungen speichern: Du kannst die Druckeinstellungen in einer separaten Excel-Datei speichern und bei Bedarf importieren, um Zeit zu sparen.
  • VBA Fehlerbehandlung: Implementiere eine Fehlerbehandlung in deinem VBA-Code, um unerwartete Probleme beim Drucken zu vermeiden.
  • Testdrucke: Führe Testdrucke in der Vorschau durch, um sicherzustellen, dass alle Einstellungen korrekt sind, bevor du die endgültigen Ausdrücke machst.

FAQ: Häufige Fragen

1. Wie kann ich den einseitigen Druck als Standard einstellen?
Du kannst den einseitigen Druck als Standard in den Druckeinstellungen deines Druckertreibers festlegen. Bei Windows 10 findest du dies unter "Einstellungen" > "Geräte" > "Drucker & Scanner".

2. Was mache ich, wenn der Drucker immer noch beidseitig druckt?
Überprüfe, ob der PrintAPI-Code korrekt implementiert ist und ob der Druckertreiber ordnungsgemäß installiert ist. Es kann auch hilfreich sein, den Drucker neu zu starten.

3. Kann ich meine Druckeinstellungen auch ohne VBA ändern?
Ja, du kannst die Druckeinstellungen manuell über die Windows Druckeroptionen ändern, wie in der Sektion "Alternative Methoden" beschrieben.

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