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
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
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?
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
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
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
Habe den letzten Code genauso kopiert. bei acNormal druckt er den Bericht dann wieder 2 Mal...
Hi
sorry, mein Fehler,
Was passiert mit
DoCmd.OpenReport "rpt_AdressMAOrgatelefonlisteprivat", acPreview , "Nr=" & Me.Parent!Nr , acHidden
Harald
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
danke euch beiden,
werde das leider erst nach weihnachten probieren können.berichte dann selbstverständlich vom Ergebnis.
gruß
manfred
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