beidermachtvongreyscull
Goto Top

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:

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

Content-Key: 604617

Url: https://administrator.de/contentid/604617

Printed on: April 23, 2024 at 22:04 o'clock

Member: TomTomBon
TomTomBon Sep 21, 2020 updated at 09:20:20 (UTC)
Goto Top
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
Member: beidermachtvongreyscull
beidermachtvongreyscull Sep 21, 2020 at 10:18:45 (UTC)
Goto Top
Tach,

lass es. Ich habe irgendwie den Eindruck, dass Du mir bei meinem Problem in VBA nicht weiterhilfst, da ich mit
Kommentaren wie dem hier

da sträuben sich mir die Haare wenn Ich das lese.

nichts Konstruktives anfangen kann.

Wie Du weiterschreibst

Ich vermute mal das es funktionieren sollte, ABER.
Wahrscheinlich nut mit Windows.

muss ich annehmen, dass Du von VBA nichts verstehst.

Ich habe eine 3-Sekunden-Pause zwischen die beiden Durchjobs integriert und beobachte estmal.

Gruß
Member: TomTomBon
TomTomBon Sep 21, 2020 at 10:48:01 (UTC)
Goto Top
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.
Member: beidermachtvongreyscull
beidermachtvongreyscull Oct 06, 2020 at 13:07:48 (UTC)
Goto Top
Es war so einfach...

Einfach die Spooler rekonfiguriert.
Die Druckaufträge wurden direkt zum Drucker gesendet.

Das ist nun anders.
Jetzt wird über den Spooler gedruckt und erst nach der letzten Seite begonnen.

Problem gelöst.