Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1828to1832
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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
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
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?
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

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen