Word 2016 - VBA-Makro für schnelles Ausdrucken - Einsatz auf Terminalserver 2016 führt seit kurzem zum Einfrieren von Word und der Druckerwarteschlange - Warum?
Guten Morgen Kollegen,
um es meinen Nutzern einfacher zu machenund gewisse Fehler einzufangen, habe ich für sie ein Makro bereitgestellt, dass es erlaubt, Dokumente quasi mit einem Klick so auszudrucken, dass die erste Seite aus einem bestimmten Fach am Kopierer gezogen wird (für Briefkopf) und die restlichen Seiten aus dem Großraummagazin kommen.
So sieht der Code im Kernmodul dafür aus:
Dieser Code hat bisher immer wie erwartet funktioniert, allerdings beobachte ich in jüngster Vergangenheit, dass er sich manchmal, für mich noch nicht nachvollziehbar regelrecht verheddert.
Ein Worddokument so ausgedruckt resultiert in zwei Druckjobs, die erste Seite als eigenständiger Job und die übrigen ebenfalls als ein Druckjob.
In der Warteschlange stellt sich das so dar, dass ein Job im Status "wird gedruckt" steht und der andere keinen hat.
Word fängt dann an zu warten und es bewegt sich nichts.
Wenn ich in der Warteschlange beide Jobs lösche, taut Word sofort wieder auf. Es scheint da hin und wieder zu einem Kommunikationsproblem zu kommen.
Kann es sein, dass ich einen Timeout zwischen die Erzeugung der beiden Druckjobs einbauen muss oder liegt wo anders der Fehler?
Danke und viele Grüße
Andreas
um es meinen Nutzern einfacher zu machenund gewisse Fehler einzufangen, habe ich für sie ein Makro bereitgestellt, dass es erlaubt, Dokumente quasi mit einem Klick so auszudrucken, dass die erste Seite aus einem bestimmten Fach am Kopierer gezogen wird (für Briefkopf) und die restlichen Seiten aus dem Großraummagazin kommen.
So sieht der Code im Kernmodul dafür aus:
Private Sub ProDruSSSB()
'Warnung beim Ausdruck von MarkUps
Dim bOption As Boolean
'alten Wert einlesen
bOption = Options.WarnBeforeSavingPrintingSendingMarkup
'Warnung ausschalten
Options.WarnBeforeSavingPrintingSendingMarkup = False
Do While numKopien > 0
'Drucken
'Drucken der 1. Seite auf speziellem Papier aus Tray 1 oder 3
With ActiveDocument.PageSetup
.FirstPageTray = 1
.OtherPagesTray = 1
End With
'Debuganzeige aktualisieren - START
If ActiveDocument.PageSetup.FirstPageTray = 1 Then
frmProDruSS.Label8.Caption = "oberes Papierfach (ID 1)"
End If
If ActiveDocument.PageSetup.FirstPageTray = 3 Then
frmProDruSS.Label8.Caption = "mittleres Papierfach (ID 3)"
End If
If ActiveDocument.PageSetup.FirstPageTray = 7 Then
frmProDruSS.Label11.Caption = "Ausdruck Folgeseiten"
End If
If ActiveDocument.PageSetup.OtherPagesTray = 7 Then
frmProDruSS.Label10.Caption = "Großraummagazin (ID 7)"
End If
If ActiveDocument.PageSetup.OtherPagesTray = 1 Then
frmProDruSS.Label11.Caption = "Nur Ausdruck der 1. Seite"
End If
DoEvents
'Debuganzeige aktualisieren - ENDE
Application.PrintOut FileName:="", _
Range:=wdPrintRangeOfPages, _
Item:=wdPrintDocumentWithMarkup, _
Copies:=1, Pages:="1-1", _
PageType:=wdPrintAllPages, _
Collate:=True, _
Background:=True, _
PrintToFile:=False
'Drucken der 1. Seite auf speziellem Papier aus Tray 1 oder 3 - ENDE
'Drucken der Folgeseiten aus Großraummagazin
With ActiveDocument.PageSetup
.FirstPageTray = 7
.OtherPagesTray = 7
End With
'Debuganzeige aktualisieren - START
If ActiveDocument.PageSetup.FirstPageTray = 1 Then
frmProDruSS.Label8.Caption = "oberes Papierfach (ID 1)"
End If
If ActiveDocument.PageSetup.FirstPageTray = 3 Then
frmProDruSS.Label8.Caption = "mittleres Papierfach (ID 3)"
End If
If ActiveDocument.PageSetup.FirstPageTray = 7 Then
frmProDruSS.Label11.Caption = "Ausdruck Folgeseiten"
End If
If ActiveDocument.PageSetup.OtherPagesTray = 7 Then
frmProDruSS.Label10.Caption = "Großraummagazin (ID 7)"
End If
If ActiveDocument.PageSetup.OtherPagesTray = 1 Then
frmProDruSS.Label11.Caption = "Nur Ausdruck der 1. Seite"
End If
DoEvents
'Debuganzeige aktualisieren - ENDE
'Druck nur starten, wenn Dokument mehr als eine Seite hat.
If ActiveDocument.Range.Information(wdActiveEndPageNumber) > 1 Then
Application.PrintOut FileName:="", _
Range:=wdPrintRangeOfPages, _
Item:=wdPrintDocumentWithMarkup, _
Copies:=1, Pages:="2-", _
PageType:=wdPrintAllPages, _
Collate:=True, _
Background:=True, _
PrintToFile:=False
Else
frmProDruSS.Label11.Caption = "Keine Folgeseiten"
End If
'Drucken der Folgeseiten aus Großraummagazin - ENDE
'Drucken Ende
numKopien = numKopien - 1
frmProDruSS.Label6.Caption = numKopien
frmProDruSS.Label5.Caption = "ACHTUNG: Kopienzähler läuft rückwärts und zeigt jetzt die noch zu fertigenden Kopien an. Dieses Fenster schließt sich selbsttätig. Bitte haben Sie einen Moment Geduld."
'Debug-Anzeige löschen - START
frmProDruSS.Label8.Caption = ""
frmProDruSS.Label10.Caption = ""
frmProDruSS.Label11.Caption = ""
'Debug-Anzeige löschen - ENDE
DoEvents
Loop
End Sub
Dieser Code hat bisher immer wie erwartet funktioniert, allerdings beobachte ich in jüngster Vergangenheit, dass er sich manchmal, für mich noch nicht nachvollziehbar regelrecht verheddert.
Ein Worddokument so ausgedruckt resultiert in zwei Druckjobs, die erste Seite als eigenständiger Job und die übrigen ebenfalls als ein Druckjob.
In der Warteschlange stellt sich das so dar, dass ein Job im Status "wird gedruckt" steht und der andere keinen hat.
Word fängt dann an zu warten und es bewegt sich nichts.
Wenn ich in der Warteschlange beide Jobs lösche, taut Word sofort wieder auf. Es scheint da hin und wieder zu einem Kommunikationsproblem zu kommen.
Kann es sein, dass ich einen Timeout zwischen die Erzeugung der beiden Druckjobs einbauen muss oder liegt wo anders der Fehler?
Danke und viele Grüße
Andreas
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 604617
Url: https://administrator.de/forum/word-2016-vba-makro-fuer-schnelles-ausdrucken-einsatz-auf-terminalserver-2016-fuehrt-seit-kurzem-zum-604617.html
Ausgedruckt am: 31.03.2025 um 16:03 Uhr
4 Kommentare
Neuester Kommentar
Moin Moin,
da sträuben sich mir die Haare wenn Ich das lese.
Ich vermute mal das es funktionieren sollte, ABER.
Wahrscheinlich nut mit Windows.
Dort wahrscheinlich ganz gut mit XPS v4 Treibern.
Damit zurück auf die erste Standardfrage:
Hersteller
Modell
Welcher Treiber?
(In der Kyo Welt gibt es 5 Typen Treiber...)
Mein Senf
da sträuben sich mir die Haare wenn Ich das lese.
Ich vermute mal das es funktionieren sollte, ABER.
Wahrscheinlich nut mit Windows.
Dort wahrscheinlich ganz gut mit XPS v4 Treibern.
Damit zurück auf die erste Standardfrage:
Hersteller
Modell
Welcher Treiber?
(In der Kyo Welt gibt es 5 Typen Treiber...)
Mein Senf
Moin,
Nein, bei dem VBA kann Ich dir nicht weiter helfen.
Mein Bereich ist die Druckertreiber Welt.
Und ja, wenn Ich höre das jemand nicht mit den Hersteller Methoden arbeitet sträubt es sich mir.
Flappsiger Ausdruck, aber Tatsache.
Es ist Hersteller kompatibel, bei MS.
Dann sollte man MS Treiber nehmen.
Die gibt es.
Z.B. einen XPS v4 Treiber.
DeFacto gibt es immer wieder Probleme mit MS Office und Drucker Treiber weil Microsoft sagt, und so denkt und handelt, das sie der Standard sind.
Nur funktioniert das nicht einmal immer MS interne Programme.
Und mit anderen Firmen..
Deswegen sind Standards ja auch gedacht.
Mein Senf, und bitte auch daran denken das es Sachen rundum gibt.
Nein, bei dem VBA kann Ich dir nicht weiter helfen.
Mein Bereich ist die Druckertreiber Welt.
Und ja, wenn Ich höre das jemand nicht mit den Hersteller Methoden arbeitet sträubt es sich mir.
Flappsiger Ausdruck, aber Tatsache.
Es ist Hersteller kompatibel, bei MS.
Dann sollte man MS Treiber nehmen.
Die gibt es.
Z.B. einen XPS v4 Treiber.
DeFacto gibt es immer wieder Probleme mit MS Office und Drucker Treiber weil Microsoft sagt, und so denkt und handelt, das sie der Standard sind.
Nur funktioniert das nicht einmal immer MS interne Programme.
Und mit anderen Firmen..
Deswegen sind Standards ja auch gedacht.
Mein Senf, und bitte auch daran denken das es Sachen rundum gibt.