Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1464to1468
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

Seirenbrief aus Excel

Seirenbrief aus Excel
18.12.2015 15:21:09
Toro
Hallo liebe Forumsmitgleider,
dieses Forum ist mir schon seit über einem Jahr ein treues Nachschlagewerk, wenn ich Probleme mit Excel und VBA habe.
Aktuell habe ich aber keine passende Lösung gefunden, womit ich hiermit meinen ersten Beitrag gebe. Na gut ist wohl eher eine Frage :-)
In einem alten Beitrag https://www.herber.de/forum/archiv/1032to1036/1032638_Aus_Excelmakro_Word_Serienbrief_starten.html habe ich die Erstellung eines Serienbriefes aus Excel heraus geschafft.
Nun möchte ich aber gerne die Abfragefenster für das Drucken und Speichern entfernen. Das ist auch noch halb so wild und machbar.
Bleibt im unteren Teil nur noch folgender Code übrig:
docSerienbrief.Application.WindowState = wdWindowStateMinimize
docSerienbrief.PrintOut
docSerienbrief.Application.Quit savechanges:=False
Set docSerienbrief = Nothing
Set WinWord = Nothing
Set WinDoc = Nothing
Exit Sub

Läuft soweit auch, nur leider scheint Word es nicht mehr zu schaffen das Dokument an den Drucker zu senden, bevor es geschlossen wird.
Ich bekomme zwar die Meldung, dass der Auftrag gesendet wird, bekomme aber keinen Ausdruck und wenn dann mit viel Glück ein paar Seiten.
Und nun die Kernfrage:
Gibt es Attribute oder Befehle, mit denen die Datei erst komplett an den Drucker gesendet wird und erst danach geschlossen wird?
Ich danke euch schon einmal im Voraus und wünsche ein schönes Wochenende *wink*

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Seirenbrief aus Excel
19.12.2015 14:25:09
JoWe
Hallo,
mit folgender Funktion kannst Du prüfen ob die Druckerwarteschlange leer ist oder nicht:
Public Function testSpooler() As Long
Dim WMI As Object
Dim Aufträge As Object
Set WMI = GetObject("winmgmts:\\.\root\cimv2")
Set Aufträge = WMI.ExecQuery("SELECT * FROM Win32_PrintJob")
testSpooler = Aufträge.Count
End Function
zusammen mit einer kleinen Schleife vor Deinem "docSerienbrief.Application.quit" sollte das eigentlich klappen. Die Schleife sieht so aus:
Do While testSpooler > 0
Application.Wait Now + TimeSerial(0, 0, 3)
Loop
Gruß
Jochen

Anzeige
AW: Seirenbrief aus Excel
21.12.2015 13:58:44
Toro
Hallo Jochen,
vielen Dank für die schnelle Rückmeldung.
Funktioniert bestens *daumen*hoch*
Allen eine besinnliche Weihnachtszeit und einen guten Rutsch
Greets :-)

AW: Serienbrief aus Excel
19.12.2015 17:42:58
fcs
Hallo Toro Less,
man kann die Druckerwarteschlange auch direkt von Word aus prüfen. - Variante 1
Alternativ kannst du auch versuchen eine Warteschlange in Excel zu kreieren, mit auszutestenden Vorgabewerten. Variante 2
Gruß
Franz
'Variante 1
docSerienbrief.Application.WindowState = wdWindowStateMinimize
docSerienbrief.Application.DisplayAlerts = wdAlertsNone
docSerienbrief.PrintOut
docSerienbrief.Application.DisplayAlerts = wdAlertsAll
'In Schleife Warten bis in Word Druckjob abgeschlossen ist
Do Until docSerienbrief.Application.BackgroundPrintingStatus = 0
Application.Wait Now() + TimeSerial(0, 0, 2) '2 Sekunden-Pause
Loop
docSerienbrief.Application.Quit savechanges:=False
Set docSerienbrief = Nothing
Set WinWord = Nothing
Set WinDoc = Nothing
Exit Sub
'Variante 2
docSerienbrief.Application.WindowState = wdWindowStateMinimize
docSerienbrief.Application.DisplayAlerts = wdAlertsNone
docSerienbrief.PrintOut
docSerienbrief.Application.DisplayAlerts = wdAlertsAll
'Wartezeit bis zum Schliessen von Word
Dim dblWarten As Double
dblWarten = docSerienbrief.BuiltinDocumentProperties("Number of pages")
'mindestens 5 Sekeunden + 0,2 Sekunden pro Seite (5 bzw. 0.2 ggf. anpassen)
dblWarten = (5 + dblWarten * 0.2) 'Wartezeit in Sekunden
dblWarten = Application.WorksheetFunction.RoundUp(dblWarten, 0) 'Wartezeit Aufrunden
dblWarten = dblWarten / 60 / 60 / 24 'Sekunden umrechnen in Excel-Zeitwert
Application.Wait Now() + dblWarten 'Pause in Excel-Makro-Ausführung
docSerienbrief.Application.Quit savechanges:=False
Set docSerienbrief = Nothing
Set WinWord = Nothing
Set WinDoc = Nothing
Exit Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige