Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Fremo am Februar 07, 2011, 10:22:39

Titel: VBA in 2010: Printout - Anzahl Kopien hat keine Funktion
Beitrag von: Fremo am Februar 07, 2011, 10:22:39
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.
Titel: Re: VBA in 2010: Printout - Anzahl Kopien hat keine Funktion
Beitrag von: DF6GL am Februar 07, 2011, 12:40:43
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.



Titel: Re: VBA in 2010: Printout - Anzahl Kopien hat keine Funktion
Beitrag von: Fremo am Februar 07, 2011, 13:48:25
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!




Titel: Re: VBA in 2010: Printout - Anzahl Kopien hat keine Funktion
Beitrag 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.
Titel: Re: VBA in 2010: Printout - Anzahl Kopien hat keine Funktion
Beitrag von: database am Februar 07, 2011, 14:58:09
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.

Titel: Re: VBA in 2010: Printout - Anzahl Kopien hat keine Funktion
Beitrag von: DF6GL am Februar 07, 2011, 15:14:33
Hallo Peter,   Du hast Recht bei A2003.  Bei A2007 tritt der beschriebene Fehler (oder ist es ein "Feature" ??? )  auf....
Titel: Re: VBA in 2010: Printout - Anzahl Kopien hat keine Funktion
Beitrag von: database am Februar 07, 2011, 15:26:38
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.   ???
Titel: Re: VBA in 2010: Printout - Anzahl Kopien hat keine Funktion
Beitrag von: DF6GL am Februar 07, 2011, 15:32:32
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...
Titel: Re: VBA in 2010: Printout - Anzahl Kopien hat keine Funktion
Beitrag von: database am Februar 07, 2011, 15:36:45
Jou, eben auch probiert - CutePDF ist bei mir installiert - legt nur 1 File an.
Titel: Re: VBA in 2010: Printout - Anzahl Kopien hat keine Funktion
Beitrag von: DF6GL am Februar 07, 2011, 15:37:03
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...
Titel: Re: VBA in 2010: Printout - Anzahl Kopien hat keine Funktion
Beitrag von: database am Februar 07, 2011, 15:42:18
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*   ::) :-\
Titel: Re: VBA in 2010: Printout - Anzahl Kopien hat keine Funktion
Beitrag von: DF6GL am Februar 07, 2011, 15:51:04
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





Titel: Re: VBA in 2010: Printout - Anzahl Kopien hat keine Funktion
Beitrag von: database am Februar 07, 2011, 15:59:00
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
Titel: Re: VBA in 2010: Printout - Anzahl Kopien hat keine Funktion
Beitrag von: DF6GL am Februar 07, 2011, 16:12:17
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..






Titel: Re: VBA in 2010: Printout - Anzahl Kopien hat keine Funktion
Beitrag von: database am Februar 07, 2011, 20:46:37
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)

Titel: Re: VBA in 2010: Printout - Anzahl Kopien hat keine Funktion
Beitrag von: DF6GL am Februar 07, 2011, 22:17:56
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 ..
Titel: Re: VBA in 2010: Printout - Anzahl Kopien hat keine Funktion
Beitrag von: Fremoc am Februar 07, 2011, 22:50:45
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.
Titel: Re: VBA in 2010: Printout - Anzahl Kopien hat keine Funktion
Beitrag von: DF6GL am Februar 08, 2011, 08:18:12
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...