hier einmal ein Beispiel, wie man die Printjobs.dll in einem VBScript verwenden kann. Das VBScript muss sich dazu in dem gleichen Verzeichnis befinden wie die Dll.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Option Explicit
Dim myObject dim x
set myObject=createObject("Printjobs.Druckauftrag") x= myObject.Dokument_in_Spool("FreePDF_PS",,True)
'wscript.echo gibt den Wert x aus. Kann gelöscht werden, da nur Demofunktion. wscript.echo x
In dem Codeschnippsel wird jetzt für den Drucker 'FreePDF_PS' die Druckerwarteschlange geprüft und der gesamte Code wird erst dann fortgesetzt, wenn alle Ausdrucke erfolgt sind.
Eine genaue Funktionsbeschreibung der Dll und Exe findet Ihr auf meiner Webseite unter 4. Tools.
Im Bereich VB-Programmbeispiele habe ich auch ein vollständiges Beispiel hinterlegt.
Gruß Ahmed
FreePDF_Multidoc (PS2PDF mit vielen Optionen f. FreePDF) File2PDF (komplette Verzeichnisse auf einen Streich umwandeln) findest Du alles hier: http://amTools.de
Hallo liebes Forum, vielen Dank für die dll... Leider benötige ich hierzu hilfe... Kann ich die ausstehenden Druckaufträge irgendwie in einem Listenfeld im Formular anzeigen lassen, so das diese immer im z.b. sekundentakt aktualisiert werden? ich bekomme es leider einfach nicht hin...
Zitat von wetlookKann ich die ausstehenden Druckaufträge irgendwie in einem Listenfeld im Formular anzeigen lassen, so das diese immer im z.b. sekundentakt aktualisiert werden?
das ist leider nicht möglich. Die Printjobs.dll liefert als Funktionsrückgabe nur die Anzahl der noch ausstehenden Drucke im Druckspooler als Ergebnis zurück.
Gruß Ahmed
FreePDF_Multidoc (PS2PDF mit vielen Optionen f. FreePDF) File2PDF (komplette Verzeichnisse auf einen Streich umwandeln) findest Du alles hier: http://amTools.de
Hallo, hast du irgendwo zufällig eine Beispieldatei (mdb) die du mir schicken könntest? Ich habe jetzt schon 2 Tage lang versucht das ganze ans Laufen zu bekommen, aber es klappt einfach nicht. Noch nicht einmal die Grundfunktion der Anzeige. Könnte die Funktion mit dem Wait zwischen den Druckaufträgen sooo gut gebrauchen. Danke für Deine Hilfe!
du musst die Printjobs.dll erst einmal registrieren. Dazu kopierst Du die dll in beliebiges Verzeichnis.
Danach führst du folgenden Batchbefehl aus:
1 2 3 4 5
echo off regsvr32.exe "C:UsersAhmedProgrammtoolsFreePDF_MultidocPrintjobs.dll" exit
Nun öffnest Du deine Datenbank und wechselst in den VBA-Editor (Alt+F11). In dem VBA-Editor wählst du unter
-> Extras -> Verweise -> Durchsuchen
die DLL aus. Nun sollte diese in den Verfügbaren Verweisen mit einem Haken aufgelistet sein.
Im Anschluss einfach auf die DLL wie nachfolgend verweisen: (Achtung: Beispiel ist für Word. Bitte selbst anpassen.)
Zitat Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'Optional, nur nötig wenn manuelle Überwachung
Public Sub Print_Serienbrief()
Dim i As Long
'Variable erstellen für den Funktionsaufruf der Printjobs.dll Dim myDruckjobs As New Druckauftrag Dim strPrinter As String
strPrinter = ActivePrinter 'merken des alten Druckers ActivePrinter = "FreePDF_Multidoc" 'umstellen auf neuen Drucker For i = 1 To ActiveDocument.Sections.Count 'alle Abschnitte einzeln drucken Application.PrintOut Range:=wdPrintRangeOfPages, Item:= _ wdPrintDocumentContent, Copies:=1, Pages:="S" & i, _ PageType:=wdPrintAllPages, _ Background:=False Next
i = myDruckjobs.Dokument_in_Spool("FreePDF_Multidoc", ActiveDocument.name, True)
ActivePrinter = strPrinter 'zurücksetzen auf alten Drucker
'Optionale manuelle Überwachung des Druckerspoolers 'Wenn die manuelle Überwachung nicht gewünscht wird, bitte diesen Abschnitt löschen
Do While i > 0 DoEvents Sleep 5000 '5 Sekunden warten i = myDruckjobs.Dokument_in_Spool("FreePDF_Multidoc", ActiveDocument.name) 'i=Anzahl der Druckaufträge Loop
'Ende Optionale manuell Überwachung
End Sub
Alle Parameter sind auf meiner Webseite unter Printjobs.dll ausführlich mit Beispielen beschrieben.
Hierzu gibt es auch eine Online-Demonstration (s. Überschrift).
Gruß Ahmed
FreePDF_Multidoc (PS2PDF mit vielen Optionen f. FreePDF) File2PDF (komplette Verzeichnisse auf einen Streich umwandeln) findest Du alles hier: http://amTools.de
Hallo, wenn die printjobs.dll einen Auftrag im Spooler findet, geht sie in die Wait-Schleife. In dem Fenster wird dann 1 Druckauftrag angezeigt. Wenn ich auf abbrechen klicke, läuft mein Programmcode weiter.
Kann man die Taste abbrechen irgendwo im Code mit weiteren Funktionen ergänzen? Es soll in diesem Fall dann nicht mein normaler VBA-Code weiterlaufen, sondern in einen anderen Bereich (goto) springen. Ich finde die Stelle nicht... Ich stelle es mir so vor: Abbruch klicken -->msgbox"sie haben abgebrochen"-->VBA läuft auf ein goto ende
Ich gebe es zu, es ist ein bisschen versteckt bei den Parameterbeschreibungen.
if result = -1 then goto ....
Gruß Ahmed
FreePDF_Multidoc (PS2PDF mit vielen Optionen f. FreePDF) File2PDF (komplette Verzeichnisse auf einen Streich umwandeln) findest Du alles hier: http://amTools.de
Hallo, ich finde es einfach nicht. Wo genau steht das denn? Im Modul oder muss ich in die dll? Falls ja, wie komm ich da rein? Texteditor geht ja nicht.. Sorry-Brett vor dem Kopf... Danke das du so geduldig bist...
Dim iResult As Long Dim i as long Dim strPrinter As String
'Variable erstellen für den Funktionsaufruf der Printjobs.dll Dim myDruckjobs As New Druckauftrag
strPrinter = ActivePrinter 'merken des alten Druckers ActivePrinter = "FreePDF_Multidoc" 'umstellen auf neuen Drucker
For i = 1 To ActiveDocument.Sections.Count 'alle Abschnitte einzeln drucken Application.PrintOut Range:=wdPrintRangeOfPages, Item:= _ wdPrintDocumentContent, Copies:=1, Pages:="S" & i, _ PageType:=wdPrintAllPages, _ Background:=False Next
'Anzeige des Warteformulars iResult = myDruckjobs.Dokument_in_Spool("FreePDF_Multidoc", ActiveDocument.name, True)
ActivePrinter = strPrinter 'zurücksetzen auf alten Drucker
End Sub
Wenn jetzt die Überwachung abgebrochen wird (Button Abbruch), erhält iResult
einen Rückgabewert -1. Auf diesen Rückgabewert kannst Du jetzt ja selbst prüfen.
FreePDF_Multidoc (PS2PDF mit vielen Optionen f. FreePDF) File2PDF (komplette Verzeichnisse auf einen Streich umwandeln) findest Du alles hier: http://amTools.de
Hallo, wird -1 denn nur bei dem Button Abbruch übergeben, oder auch wenn alle Druckaufträge fertig sind? Ich habe mir dieses hier gebaut, jedoch reagiert er auf das -1 nicht oder er geht nicht in die Hauptschleife zurück:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Codestart: DoCmd.OpenReport "Rezept", , , "ID =" & Me!ID
Do While i > 0 DoEvents sleep 1000 '1 Sekunden warten
i = myDruckjobs.Dokument_in_Spool(Drucker, ActiveDocument.Name)
-1 (Cancel) wird nur bei dem Button zurückgegeben. Ansonsten ist der Wert 0.
Du prüfst ja auch auf 0
1
Do While i > 0
Gruß Ahmed[/quote]
FreePDF_Multidoc (PS2PDF mit vielen Optionen f. FreePDF) File2PDF (komplette Verzeichnisse auf einen Streich umwandeln) findest Du alles hier: http://amTools.de
Ich drücke mich manchmal doof aus, sorry... Aber es ist total lieb das du mir hilfst... Er soll, wenn 1 Druckauftrag in der Warteschlange ist nicht weitermachen deshalb prüfe ich i größer 0 -->dann die Schleife bis alle Druckaufträge weg sind. Danach soll er wieder bei [/code] Codestart: [/code] loslegen und den nächsten drucken [code] DoCmd.OpenReport "Rezept", , , "ID =" & Me!ID [code] Er soll also immer 1 drucken, warten bis er fertig ist, dann den nächsten. Wenn ich auf abbruch klicke soll er zu
Codestart: DoCmd.OpenReport "Rezept", , , "ID =" & Me!ID
i = myDruckjobs.Dokument_in_Spool(Drucker, ActiveDocument.Name,True)
if MsgBox("Möchten Sie einen weiteren Bericht ausdrucken?",vbQuestion+VbyesNo,"Abfrage Berichtsdruck")=vbyes then goto Codestart end if
EX_end:
Jetzt wird dein Code solange angehalten, bis der Ausdruck erfolgt ist und im Anschluss kann über eine msgbox gesteuert werden, ob ein weiterer Druck erfolgen soll.
Gruß Ahmed
FreePDF_Multidoc (PS2PDF mit vielen Optionen f. FreePDF) File2PDF (komplette Verzeichnisse auf einen Streich umwandeln) findest Du alles hier: http://amTools.de
Das ist von daher nicht gut, da mindestens 300 Vorgänge gedruckt werden müssen. Klar, ich könnte vorher definieren wieviele-->eingeben und die Anzahl läuft durch, aber ich möchte nicht, dass jemand vorher das Papier zählen muss... hast du eine Lösung die wie oben beschrieben läuft? Ich zweifel schon an meinem Verstand... Es ist doch eigentlich nur eine Schleife!?!
Bei einer automatischen Überwachung wird am Ende der Prüfung immer ein Rückgabwert -1 ausgeben, damit der Anwender das Programmende erkennen kann.
Bei einer manuellen Überwachung wird die Anzahl der Druckjobs ausgeben. Für alle weiteren Interaktionen ist dann der Anwender/Programmierer zuständig.
Ich verstehe auch nicht ganz, was du möchtest. Du möchtest doch, dass jedesmal am Ende neu entschieden wird, ob ein weiterer Druck erfolgen soll.
Oder du öffnest ein VB(A)-Formular und zwar nicht modal (vbModeless) in der die Abbruchbedingung festgelegt wird.
Aber das kann ich auf die Schnelle auch nicht lösen.
Gruß ahmed
FreePDF_Multidoc (PS2PDF mit vielen Optionen f. FreePDF) File2PDF (komplette Verzeichnisse auf einen Streich umwandeln) findest Du alles hier: http://amTools.de