Hi!
Ich habe eine ansich simple Routine, mit der automatisch der Reihe nach Berichte (Linienpläne) mit unterschiedlichen Filtern (Linien/Schüler) ausgedruckt werden.
Nun wollte ich - um bei 20 versch. Filtern nicht alles per Hand sortieren zu müssen - gleich die jeweils benötigte Anzahl der Kopien mit jedem Printout
angeben, wobei die jeweils benötigte Anzahl aus in der Qell-Abfrage gelesen wird.
Das funktioniert nun gar nicht - egal ob die Anzahl über die Variable oder zum Test als festen Wert eingebe - es wird immer nur ein Exemplar gedruckt. :'(
Hat jemand ne Ahnung, was das sein kann... nach einigen Versuchen und Suchen im www bin ich echt ratlos! ???
Danke vorab!!
C. F.
Hallo,
dann poste mal die "ansich simple Routine" ...
und ein Beispiel des Tabelleaufbaus mit Angabe darüber, was alles aus der Tabelle jeweils zu drucken ist.
gerne:
der sub, in dem der Druckauftrag ausgeführt wird:
------------------------------------------------------------------------------------------
Private Sub Druck(Dok, prnt, F, vert, anz)
On Error GoTo Err_Druck
If prnt = 1 Then
DoCmd.OpenReport Dok, acViewPreview, , F
Else
If vert = True Then
DoCmd.OpenReport Dok, acViewPreview, , F
DoCmd.PrintOut , , , , anz
DoCmd.Close acReport, Dok
Else
DoCmd.OpenReport Dok, acViewNormal, , F
End If
End If
Exit_Druck:
Exit Sub
Err_Druck:
MsgBox Err.Description
Resume Exit_Druck
End Sub
______________________________________________________________
Erläuterung:
Diese Prozedur dient für unterschiedliche Berichte und vor allem als Seriendruckfunktion, über die z.B. für jeden Schüler ein Linienplan gedruckt wird, und zwar mit der Option "Klassenverteiler", d.h. mit einem Deckblatt für jede Klasse, auf dem die Schüler und ihre Liniennummer zum "abhaken" stehen.
Es werden hierbei also ca. 150 Linienpläne gedruckt. (Damit man die nicht alle noch für die Klassen sortieren muss, diese Prozedut.)
prnt = Wert, der vorgibt, ob Druckauftrag direkt an Drucker, oder Preview
Dok = Dokumentenname
vert = Verteiler?
anz = Variable für die Anzahl der Kopien (was ja nicht geht)
Die Datenquelle des Berichts (Linienplan mit Fahrer-, Schüler- Haltestellendaten) ist eine Tabelle mit ca. 140 Datensätzen und je ca. 65 Datenfeldern, die aus mehrfachen teils sehr komplexen Abfragen generiert wird. Die Daten werden also nicht in der Datenquelle des Berichts noch irgendwie aufbereitet.
Das ganze funktioniert auch tadellos, nur dass immer nur ein Exemplar einer Linie (je Klasse) gedruckt wird. (Immer erst in einen virtuellen Drucker!)
Fehlt noch eine Info?
Vorab schonmal Danke für Deine Mühe!
Hallo,
zeige bitte noch den Code, mit dem die Sub aufgerufen wird, damit sie mehrere Kopien drucken soll.
Hallo,
also entweder ist anz leer oder es wird der Else-Zweig mit If vert = True nicht angesprungen.
Der Code an sich funktioniert ordnungsgemäß - wobei aber nicht nachvollzogen werden kann was in F stehen sollte/könnte.
Hallo Peter, Du hast Recht bei A2003. Bei A2007 tritt der beschriebene Fehler (oder ist es ein "Feature" ??? ) auf....
Hallo Franz,
ich hab's eben mal nachgestellt mit einer mdb und der gleichen Datei KONVERTIERT nach 2007 - beide Male werden die richtige Anzahl von Kopien ausgedruckt. ???
Hallo Peter,
mhmm, interessant...
bei mir klappt die Anzahl mit A2007 und accdb-Format nicht.... (getestet mit einem PDF-Drucker)
Ich versuch das auch mal mit einem "richtigen "Drucker...
Jou, eben auch probiert - CutePDF ist bei mir installiert - legt nur 1 File an.
Hi,
sehr interessant...
mit Ausdruck auf einen physikalischen Drucker klappt das auch mit A2007 ....
Sollte das wieder so ein "Feature" von Microsoft sein ???
PS: Mit Druckern hab ich auch an anderen Stellen mit dem Off2007 Probleme, z. B. übernimmt Outlook 2007 keine voreingestellten Druckereigenschaften, z. B. ein vordefiniertes Papiermagazin. Auch die "online" -Auswahl im Druckdialog klappt bei Outlook2007 nicht. Bei Word2007 dagegen schon...
Könnte es sein, dass die PDF-Drucker deswegen nicht wollen, weil das File ja praktisch bei jedem Ausdruck gleich heißt?
p.s. Outlook ist ja sowieso ein ganz eigenes Kapitel ... *grrrr* ::) :-\
Hallo,
eher nicht... er soll ja in EINEM Druckjob mehrere Seiten erzeugen...
Wie gesagt, unter A2003 klappt das mit einem PDF-Drucker...
M. E. hat MS an der Schnittstelle zu den Druckertreibern geschlampt (sagen wir mal: verschlimmbessert), oder die Treiber sind nicht (mehr) kompatibel.... Vermutlich spuckt da auch das BS mit hinein... (Wobei der Effekt mit Outlook2007 unter Win-XP auftritt)
Habe hier getestet:
A2003 / WinXP-SP3 FreePDF / HPDeskjet am akt. "lokal"-Rechner im LAN
A2007 / Win 7 Remotedesktop auf WIN7-Rechner im LAN
Hmmm..
Zitater soll ja in EINEM Druckjob mehrere Seiten erzeugen
ich hätte es so interpretiert, dass er ein und den selben Bericht mehrmals ausdruckt
also den gleichen Bericht 2x, 3x, Nx an den Drucker sendet :-\
Meine Versuche liefen (bürobedingt) auf A2007 / Win 7 Ultimate auf HP OfficeJet Pro K550 Netzwerkdrucker
Hallo,
wenn ich bei mir die Druckerwarteschlange ansehe (Doppelklick auf Druckername),dann sehe ich nur einen aktiven Druckjob, ob eine oder mehrere Kopien (und egal, wieviel Seiten eine Kopie nun hat) ... Die Kopienanzahl wird doch nur dem Druckertreiber mitgeteilt, der den Drucker wiederum über dessen Befehlssatz auf die Kopienanzahl einstellt.
(Altenativ könnte man ja hergehen und statt Printout die Druckereigenschaften (Printer.Copies) einstellen)
PS: grerade mal getestet, selber Effekt..
Hallo Franz,
ich glaube ich hab' mich da nicht ganz deutlich ausgedrückt - natürlich steht nur EIN Druckauftrag in der Warteschlange und der besteht eben aus den angeforderten Seiten - bei einem physikalischen Drucker
Hmmmm ... lag wohl daran, dass ich schon mehr am Heimweg war als in der Firma :D ;D ::)
Beim PDF-Printer gibt's in der Druckerwarteschlange nur eine Seite, egal ob ich jetzt 2 oder 20 Exemplare angebe...
Zuerst habe ich gedacht, dass das bei den Free-PDF-Printern so ist, jetzt daheim mit Adobe-PDF gedruckt, das gleiche Bild.
Ich hätte da angenommen, dass er die angeforderten 20 Seiten/Kopien vielleicht in eine einzige Date verpackt - aber nein!
Mir ist das noch NIE aufgefallen ... wann hätte ich auch mehr als ein Exemplar *.pdf von der gleichen Datei benötigt - so scheint's mir dann auch gleich wieder fast logisch ... 8)
Hallo Peter,
mhmm, ich sehe das noch etwas anders... (und auch ein bisschen OT)
Beim Ausdruck mehrerer Kopieen (mal abgesehen von diesem "Sondereffekt" hier) werden nicht in einem Druckjob mehrere vollständige "Ausdrucke" (also Dokumente mit mehreren Seiten) nacheinander ausgedruckt, sondern es wird einmalig das gesamte Dokument (also alle Seiten, wobei "neue Seite" ja auch nur ein Kommando an den Drucker bedeutet) an den Drucker (in dessen Arbeitsspeicher) geschickt. Zusätzlich dazu kommen die Kommandos, die die Druckereinstellungen beeinflussen, wozu auch die Anzahl der Ausdrucke (Kopieen) gehört.
Ob sich der Arbeitsspeicher nun bei leistungsfähigen Druckern direkt im Drucker befindet, oder ansonsten ein Teil des PC-RAMs angeknappert wird (vom Druckertreiber) , ist erstmal egal.
Unter A2003 wird auch nur EIN PDF-File erzeugt, in dem alle Seiten auftauchen, die der Bericht als solcher hat, die sich aber entspr. der Anzahl der Kopieen wiederholen.
Unter A2007 wird ein PDF-File erzeugt, in dem sich nur einmalig die Berichtsseiten vorfinden.
Wie auch immer, habe bis jetzt keine Lösung gefunden, die das Phenomen auflöst oder umgeht...
Vielleicht weiß ja sonst jemand etwas ..
Zitat von: DF6GL am Februar 07, 2011, 14:34:55
Hallo,
zeige bitte noch den Code, mit dem die Sub aufgerufen wird, damit sie mehrere Kopien drucken soll.
Hallo!
Bin erst jetzt wieder online.
Der Code, mit dem hier die Druck-Prozedur aufgerufen wird:
------------------------------------------------------------------------------------
Public Sub EPDruckSelVert(Dok, fldLin, prnt) '(Serien)druck Elternpläne Verteiler Klassen
Dim Kl As String
If Me!alleLinien = -1 Then
If prnt = 1 Then
Me!DruckOpt = 2
prnt = 2
MsgBox "Beim Seriendruck mehrerer Linien " & Chr(13) & _
"funktioniert keine Druckvoransicht!" & Chr(13) & Chr(13) & _
"Die Pläne werden direkt an den Drucker gesendet!", vbCritical
End If
If Me.Verteiler = 2 Then
Set db = CurrentDb
Set rs = db.OpenRecordset("FD-Schüler Klassen-Verteilerliste LinienAnzSch", dbOpenSnapshot)
If Not rs.BOF Then
vert = True
rs.MoveFirst
Do Until rs.EOF
If Kl <> rs!Klasse Then
Kl = rs!Klasse
F = "((Klasse)='" & Kl & "')"
DoCmd.OpenReport "Linienpläne Schüler Klassen-Verteilerliste", acViewNormal, , F 'Deckblatt Klassenverteiler
End If
anz = rs!anzschüler
L = rs!LINIE
LinFilterVert F, L, fldLin, Kl
Druck Dok, prnt, F, vert, anz 'Aufruf Druck-Prozedur
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
Else
rs.Close
Set rs = Nothing
MsgBox "Es sind keine Linien in der Tabelle!", vbCritical
Exit Sub
End If
End If
Else
L = Me!LinieWahl
LinFilter F, L, fldLin
Druck Dok, prnt, F, vert, anz
End If
End Sub
-----------------------------------------------------------------------------------------
Die Variable F steht für den Filter.
Handelt es sich hier um einen ACC2010-Bug?
Gruß
C.F.
Hallo Fremoc,
ok, kann daran aber auch nicht erkennen welche impliziten Datentypen den Variant-Variablen zugeordnet werden.
Das Problem allerdings liegt eh nicht daran, sondern scheint ein generelles A2007/2010, bzw. Druckertreiber-Problem zu sein. Siehe unsere letzten Beiträge...