Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Anzahl der Berichtsseiten vor Ausdruck angezeigt bekommen

Begonnen von Manfred S, Dezember 13, 2010, 08:52:18

⏪ vorheriges - nächstes ⏩

Manfred S

Einen schönen schnee- und eisfreien Montag wünsche ich Euch aus Oldenburg (Nds.) mit der Frage, ob und natürlich an welcher Stelle der nachstehende Code um die Funktion erweitert werden kann, in der MsgBox bereits angegeben zu bekommen, wieviele Berichtsseiten ausgedruckt werden würden (wenn man den Druckstart bestätigt)?

Und falls jemand im öff. Dienst einer Kreisverwaltung arbeitet, bsp. im Ordnungs- bzw. Straßenverkehrsamt, stelle ich die Anwendung gerne zur Verfügung (u. a. Bescheidvorlagen, Statistik- und Serienbrieffunktion, Historien, Wiedervorlagen, Dokumentenmanagement, elektronische Akte usw., eine echte Endanwenderlösung, DAU erprobt und seit 5 Jahren in steter Programm- und designfortentwicklung).

Gruß

Manfred

-------------------------------------------------------------------------------
On Error GoTo Err_Drucken_Click
Me.Refresh

If Me.Recordset.RecordCount > 0 Then
If MsgBox("Bericht jetzt ausdrucken? Stellen Sie sicher, das der Drucker eingeschaltet und mit Papier versorgt ist.", vbQuestion + vbYesNo, "Nachfrage") = vbNo Then Exit Sub
   DoCmd.SetWarnings False
DoCmd.OpenReport "rpt_AdressMAOrgatelefonlisteprivat", acNormal, , "Nr=" & Me.Parent!Nr  'AdressID

Else
MsgBox "Ausdruck nicht möglich. Der Adresse sind keine Daten zugeordnet!", vbExclamation + vbOKOnly

End If
   
Exit_Drucken_Click:
   
   Exit Sub
   
Err_Drucken_Click:
   If Err.Number <> 2301 Then  'sorgt für Überspringen der MsgBox, falls keine Daten für das Drucken vorhanden sind
   MsgBox Err.Description & Err.Number
   End If
   Resume Exit_Drucken_Click


bahasu

#1
Moin Manfred,

denkbar ist der folgende Weg:

1. Zwischen den beiden Zeilen werden zwei neue eingebaut:
    DoCmd.SetWarnings False
    DoCmd.OpenReport "rpt_AdressMAOrgatelefonlisteprivat", acNormal, , "Nr=" & Me.Parent!Nr , acHidden
    MsgBox Seitenanzahl

    DoCmd.OpenReport "rpt_AdressMAOrgatelefonlisteprivat", acNormal, , "Nr=" & Me.Parent!Nr  'AdressID

2. Im Modul deklarierst Du eine Variable:
   public Seitenanzahl as long

3. Im Bericht trägst Du im Berichtskopf beim Ereignis "Beim Formatieren" ein:
    Seitenanzahl = Me.Pages

Dann wird der Bericht beim ersten Mal unsichtbar durchgeführt, damit die Seitenanzahl ermittelt werden kann, diese wird dann angezeigt. Dieses Verfahren benötigt aber Zeit.

Harald
Servus

Manfred S

#2
Hallo,
vielen Dank für den Tipp. Den konnte ich umsetzen und es sieht jetzt so aus:

1. Zunächst poppt meine MsgBox mit dem Hinweis auf den einzuschalteten und mit ausreichend Papier zu befüllenden Drucker auf.

2.
Beim Bestätigen, den Druck zu starten, öffnet sich der Hinweis auf die Anzahl der gedruckten Seiten.

3.
Den Seitenzahlhinweis bestätigt man mit OK. Daraufhin wird der Druck allerdings erneut (ein 2. Mal also) ausgeführt

nachfolgend stelle ich mir den Ablauf jedoch vor:

a)
Besser wäre es, die Anzahl der Berichtsseiten taucht bereits im Text meiner MsgBox zu 1. auf. Dann kann der User sowohl den Druck noch abbrechen, weil er sieht, seine 2 Blatt Papier im Drucker reichen für die bevorstehenden 10 zu druckenden Seiten nicht aus und legt erst Papier nach.

b)
Wenn das nicht möglich ist, wäre eine probate Alternative, den Hinweis auf die im Druck befindliche Anzahl an Seiten
n a c h  der MsgBox zu 1. anzuzeigen. Der Hinweistext sollte dann lauten:
"Anzahl der im Druck befindlichen Seiten: ??"
Bisher wird kommentarlos nur eine Zahl angezeigt. Daraufhin kann der User nur noch OK bestätigen und das war es dann. Wenn a) ginge, wäre das Ergebnis perfekt, falls B) ginge auch eine schöne Variante. Was müßte ich dafür umstellen?
 

bahasu

Hallo,

vielleicht in der folgenden Art {ungetestet}:

If MsgBox("Anzahl Seiten: " & Seitenanzahl & chr(13) & "Bericht jetzt ausdrucken? Stellen Sie sicher, das der Drucker eingeschaltet und mit Papier versorgt ist.", vbQuestion + vbYesNo, "Nachfrage") = vbNo Then Exit Sub

Harald
Servus

Manfred S

#4
Die Anzeige der MsgBox ist damit genauso, wie ich es mir vorgestellt habe.

In der ersten Zeile gibt er mir: Seitenanzahl ??
an, in der zweiten Zeile den Hinweistext.

Allerdings fehlt jetzt der Durchlauf zum Modul und die Anzahl der Seiten wird nicht ermittelt. Hängt das damit zusammen, dass es sich um ein Ufo handelt, aus dem die Funktion aufgerufen wird? Ich habe einen zweiten Button erstellt, der den Bericht in der Druckvorschau anzeigt. Betätige ich diesen und schliesse die Vorschau und klicke anschließend den Button, der den Druck ausführen soll und die begehrte Funktion enthält, wird die Anzahl der Berichtsseiten korrekt dargestellt.

Mein Code lautet jetzt:

Me.Refresh

If Me.Recordset.RecordCount > 0 Then
If MsgBox("Anzahl Seiten: " & Seitenanzahl & Chr(13) & "Bericht jetzt ausdrucken? Stellen Sie sicher, das der Drucker eingeschaltet und mit Papier versorgt ist.", vbQuestion + vbYesNo, "Nachfrage") = vbNo Then Exit Sub
DoCmd.SetWarnings False

DoCmd.OpenReport "rpt_AdressMAOrgatelefonlisteprivat", acNormal, , "Nr=" & Me.Parent!Nr  'AdressID

Else
MsgBox "Ausdruck nicht möglich. Der Adresse sind keine Daten zugeordnet!", vbExclamation + vbOKOnly

End If
   
Exit_Drucken_Click:
   
   Exit Sub
   
Err_Drucken_Click:
   If Err.Number <> 2301 Then  'sorgt für Überspringen der MsgBox, falls keine Daten für das Drucken vorhanden sind
   MsgBox Err.Description & Err.Number
   End If

bahasu

Hallo Manfred

Zitat von: Manfred S am Dezember 13, 2010, 15:46:43
In der ersten Zeile gibt er mir: Seitenanzahl ??
an, in der zweiten Zeile den Hinweistext.
Me.Refresh

If Me.Recordset.RecordCount > 0 Then
DoCmd.OpenReport "rpt_AdressMAOrgatelefonlisteprivat", acNormal, , "Nr=" & Me.Parent!Nr , acHidden

If MsgBox("Anzahl Seiten: " & Seitenanzahl & Chr(13) & "Bericht jetzt ausdrucken? Stellen Sie sicher, das der Drucker eingeschaltet und mit Papier versorgt ist.", vbQuestion + vbYesNo, "Nachfrage") = vbNo Then Exit Sub
DoCmd.SetWarnings False

DoCmd.OpenReport "rpt_AdressMAOrgatelefonlisteprivat", acNormal, , "Nr=" & Me.Parent!Nr  'AdressID

Else
MsgBox "Ausdruck nicht möglich. Der Adresse sind keine Daten zugeordnet!", vbExclamation + vbOKOnly

End If
   
Exit_Drucken_Click:
   
    Exit Sub
   
Err_Drucken_Click:
    If Err.Number <> 2301 Then  'sorgt für Überspringen der MsgBox, falls keine Daten für das Drucken vorhanden sind
    MsgBox Err.Description & Err.Number
    End If


Die fette Zeile bitte einbauen, damit der Bericht einmal unsichtbar erstellt wird (zum Ermitteln der Seitenzahl).

Harald
Servus

Manfred S

Habe den letzten Code genauso kopiert. bei acNormal druckt er den Bericht dann wieder 2 Mal...

bahasu

Hi

sorry, mein Fehler,

Was passiert mit

DoCmd.OpenReport "rpt_AdressMAOrgatelefonlisteprivat", acPreview , "Nr=" & Me.Parent!Nr , acHidden

Harald
Servus

DF6GL

Hallo,

evtl. so:


DoCmd.OpenReport "rpt_AdressMAOrgatelefonlisteprivat", acPreview, , "Nr=" & Me.Parent!Nr , acHidden

if MsgBox "Erforderliche Blätter: " & Reports!rpt_AdressMAOrgatelefonlisteprivat.Pages  & " einlegen. Drucken? ", vbinformation+vbYesNo  ) = vbYes then
Docmd.printout....
End if
DoCmd.Close acReport, "rpt_AdressMAOrgatelefonlisteprivat"



Wichtig ist, dass ein Steuerelement mit Inhalt  =[Seiten]  im Bericht existiert

Manfred S

danke euch beiden,
werde das leider erst nach weihnachten probieren können.berichte dann selbstverständlich vom Ergebnis.
gruß
manfred

Manfred S

Hallo
ich habe es jetzt mit Variante 1. (Bahasu) so gelöst, indem ich den Bericht unmittelbar nach dem Öffen wieder schliesse. Funktioniert jetzt einwandfrei was die korrekte Darstellung der Anzahl benötigter Seiten für den Drucker angeht. Der Moment des Öffnen und Schliesen des Berichtes ist dabei erträglich.   

Danke

On Error GoTo Err_Drucken_Click
Me.Refresh

If Me.Recordset.RecordCount > 0 Then
DoCmd.OpenReport "rpt_AdressMAOrgatelefonlisteprivat", acPreview, , "Nr=" & Me.Parent!Nr, acHidden
DoCmd.Close acReport, "rpt_AdressMAOrgatelefonlisteprivat"

If MsgBox("Erforderliche Anzahl an Blätter: " & Seitenanzahl & Chr(13) & "Bericht jetzt ausdrucken? Stellen Sie sicher, das der Drucker eingeschaltet und mit Papier versorgt ist.", vbQuestion + vbYesNo, "Listendruck") = vbNo Then Exit Sub
DoCmd.SetWarnings False

DoCmd.OpenReport "rpt_AdressMAOrgatelefonlisteprivat", acNormal, , "Nr=" & Me.Parent!Nr  'AdressID

Else
MsgBox "Ausdruck nicht möglich. Der Adresse sind keine Daten zugeordnet!", vbExclamation + vbOKOnly

End If
   
Exit_Drucken_Click:
   
    Exit Sub
   
Err_Drucken_Click:
    If Err.Number <> 2301 Then  'sorgt für Überspringen der MsgBox, falls keine Daten für das Drucken vorhanden sind
    MsgBox Err.Description & Err.Number
End If
    Resume Exit_Drucken_Click