habe wiedermal ein seltsames "Problem".
Ich möchte mehrer PDF-Dokumente nacheinander via Access (VBA)
ausdrucken.
Dafür nutze ich einen Shell-Befehl. Nur wenn die Dokumente nachher aus
dem Drucker rauskommen stimmt die Reihenfolge nicht mehr. Hier ein
Beispiel:
...
ShellExecute(Application.hWndAccessApp, "Print", "PDF1.pdf", "", "C:
\", SW_SHOWNORMAL)
ShellExecute(Application.hWndAccessApp, "Print", "PDF2.pdf", "", "C:
\", SW_SHOWNORMAL)
ShellExecute(Application.hWndAccessApp, "Print", "PDF3.pdf", "", "C:
\", SW_SHOWNORMAL)
ShellExecute(Application.hWndAccessApp, "Print", "PDF4.pdf", "", "C:
\", SW_SHOWNORMAL)
ShellExecute(Application.hWndAccessApp, "Print", "PDF5.pdf", "", "C:
\", SW_SHOWNORMAL)
...
Wie zufällig könnte der Drucker die Dokumente in folgender Reihenfolge
ausdrucken:
PDF2.pdf, PDF5.pdf, PDF1.pdf, PDF2.pdf, PDF3.pdf
Eine Reihenfolgenlogik sehe ich nicht. Könnte es sein, dass das an der
Größe der Dateien liegt? Einige sind vielleicht schneller zum Druck
"aufbereitet" als andere.
Was kann ich tun, damit ich nicht am Drucker erst mal alles sortieren
muss :(
Viele Grüße
Holger
> Was kann ich tun, damit ich nicht am Drucker erst mal alles sortieren
> muss :(
du kannst nach jedem ShellExecute eine Pause/Warteschleife einlegen.
Komfortabel wäre eine solche Pause in Abhängigkeit von der Dateigröße,
falls diese die Ursache der Reihenfolge ist.
--
Gruß
aus München
Stefan
Stefan...@volke-muc.de
---------------------------------------------------------------------
Access-FAQ: http://www.donkarl.com/AccessFAQ.htm
KnowHow-MDB: http://www.freeaccess.de/
Infos für Neulinge in den Access-Newsgroups:
http://www.doerbandt.de/access/Newbie.htm
Stammtisch: http://www.access-muenchen.de/
danke für Deine Antwort.
Mit der Warteschleife ist das so eine Sache. Wir haben
unterschiedliche Client-PC's (ältere, jüngere, schnelle und langsame,
etc.). Dafür, damit es für alle passt, müsste man wirklich
experimentieren.
Habe mir mal angeschaut, ob man die Druckerwarteschlange auslesen kann
- puh - sieht sehr kompliziert aus und ob das zuverlässig ist???
Sprich, erst dann einen Druckauftrag anzustossen, wenn der Spooler
leer ist bzw. als leer zurückgemeldet wird.
Viele Grüße aus Köln.
Holger
Rutt schreibselte:
> Mit der Warteschleife ist das so eine Sache. Wir haben
> unterschiedliche Client-PC's (ältere, jüngere, schnelle und langsame,
> etc.). Dafür, damit es für alle passt, müsste man wirklich
> experimentieren.
Für einen kurzen Test sollte ein langsamer und ein schneller Client
ausreichend
sein. Falls das überhaupt relevant ist. Evtl. liegt's ja am Druckerserver
oder
am Drucker selbst.
> Habe mir mal angeschaut, ob man die Druckerwarteschlange auslesen kann
> - puh - sieht sehr kompliziert aus und ob das zuverlässig ist???
> Sprich, erst dann einen Druckauftrag anzustossen, wenn der Spooler
> leer ist bzw. als leer zurückgemeldet wird.
Wenn da zufällig ein anderer auf diesen Drucker druckt, dann kannst du
evtl. lange warten.
Sonnige Grüße aus München
Stefan
Rutt wrote:
> ...
> ShellExecute(Application.hWndAccessApp, "Print", "PDF1.pdf", "", "C:
> \", SW_SHOWNORMAL)
> ShellExecute(Application.hWndAccessApp, "Print", "PDF2.pdf", "", "C:
> \", SW_SHOWNORMAL)
> ShellExecute(Application.hWndAccessApp, "Print", "PDF3.pdf", "", "C:
> \", SW_SHOWNORMAL)
> ShellExecute(Application.hWndAccessApp, "Print", "PDF4.pdf", "", "C:
> \", SW_SHOWNORMAL)
> ShellExecute(Application.hWndAccessApp, "Print", "PDF5.pdf", "", "C:
> \", SW_SHOWNORMAL)
> ...
> Was kann ich tun, damit ich nicht am Drucker erst mal alles sortieren
> muss :(
ShellExecute schickt einen neuen Prozess auf die Reise und kuemmert sich
nicht darum, wie lange er braucht und ob/wann er endet. Wenn der 2. Prozess
vor dem ersten fertig ist, voila: Job 2 wird vor Job 1 gedruckt.
Verwende stattdessen ShellWait. Vorteil ist, dass ein Job erst vollstaendig
an den Drucker geschickt wird, bevor der naechste anlaeuft, Nachteil, dass
der Aufruf die komplette Druckausgabezeit dauert.
http://access.mvps.org/access/api/api0004.htm
Gruss - Peter
--
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com
vielen Dank. Das hört sich gut an.
Habe mal den Code eingebunden.
Mein Aufruf
...
call ShellWait("V:\PDF1.pdf")
...
Aber irgendwie passiert nichts. Hätte gedacht dass gedruckt wird.
Verstehe ich da etwas falsch???
Man übergibt dort doch die zu druckende Datei? Oder?
Viele Grüße
Holger
Rutt wrote:
> vielen Dank. Das hört sich gut an.
>
> Habe mal den Code eingebunden.
>
> Mein Aufruf
>
> ...
> call ShellWait("V:\PDF1.pdf")
> ...
>
> Aber irgendwie passiert nichts. Hätte gedacht dass gedruckt wird.
> Verstehe ich da etwas falsch???
Naja, du hast ShellExecute durch ShellWait ersetzt, mehr nicht. Du musst
das Print-Kommando so angeben, als wuerdest du es im Dos-Fenster eingeben.
Falls du die genaue Syntax nicht kennst, solltest du dort testen (Start -
Ausfuehren - cmd).
Wenn folgender Befehl unter Dos funktioniert ...
Print V:\PDF1.pdf
... koennte der Aufruf so aussehen:
Call ShellWait(Environ$("COMSPEC") & " /C print V:\PDF1.pdf")
(alles Luftcode)
verstehe.
Nur muss wahrscheinlich der Print-Befehl anders aussehen
(Gerätename???, Pfad, Datei).
Bzw. es handelt sich ja um pdf's. Ob die über die Kommandozeile
gedruckt werden können, hm.
Evtl. muss in der Zeile der ganze Acrobat Reader Pfad stehen, inkl.
Datei und Schalter zum Drucken.
Ich kann mich entsinnen, dass es dabei Probleme gab, weil sich der
Reader danach nicht mehr selber terminierte.
Wäre ja auch zu schön gewesen wenn Dein Luftcode direkt gefunzt hätte.
Werde mal was experimentieren.
Viele Grüße
Holger
Am Thu, 18 Aug 2011 00:14:58 -0700 (PDT) schrieb Rutt:
> Hallo NG'ler,
>
> habe wiedermal ein seltsames "Problem".
>
> Ich m�chte mehrer PDF-Dokumente nacheinander via Access (VBA)
> ausdrucken.
> Daf�r nutze ich einen Shell-Befehl. Nur wenn die Dokumente nachher aus
> dem Drucker rauskommen stimmt die Reihenfolge nicht mehr. Hier ein
> Beispiel:
>
> ...
> ShellExecute(Application.hWndAccessApp, "Print", "PDF1.pdf", "", "C:
> \", SW_SHOWNORMAL)
> ShellExecute(Application.hWndAccessApp, "Print", "PDF2.pdf", "", "C:
> \", SW_SHOWNORMAL)
> ShellExecute(Application.hWndAccessApp, "Print", "PDF3.pdf", "", "C:
> \", SW_SHOWNORMAL)
> ShellExecute(Application.hWndAccessApp, "Print", "PDF4.pdf", "", "C:
> \", SW_SHOWNORMAL)
> ShellExecute(Application.hWndAccessApp, "Print", "PDF5.pdf", "", "C:
> \", SW_SHOWNORMAL)
> ...
>
> Wie zuf�llig k�nnte der Drucker die Dokumente in folgender Reihenfolge
> ausdrucken:
> PDF2.pdf, PDF5.pdf, PDF1.pdf, PDF2.pdf, PDF3.pdf
>
> Eine Reihenfolgenlogik sehe ich nicht. K�nnte es sein, dass das an der
> Gr��e der Dateien liegt? Einige sind vielleicht schneller zum Druck
> "aufbereitet" als andere.
>
> Was kann ich tun, damit ich nicht am Drucker erst mal alles sortieren
> muss :(
>
> Viele Gr��e
>
> Holger
f�r das Warten eines Ausdruckes habe ich mir eine DLL (Printjobs.dll)
erstellt. Mi dieser DLL kann man den Druckerspooler f�r einen Drucker o.
Dokument �berwachen und den Programmcode solange automatisch anhalten,
bis alle Drucker f�r den Drucker/Dokument abgearbeitet sind.
Die DLL kann �berall per Verweiseinbindung verwendet werden (Office-VBA,
VB6 etc.)
Die Einrichtung ist absolut simpel. Hier die Beschreibung und
Download-Link: http://www.alice-dsl.net/ahmed.martens/Tools.html
Solltest Du noch Fragen haben, dann melde dich hier oder in meinem Forum
(http://12249lukjl.forumprofi.de)
Gru� Ahmed
--
Antworten bitte nur in der Newsgroup