Einen Bericht geschickt öffnen

Hallo,

ich möchte einen Bericht, über ein Kombinationsfeld, dass sich auf einem Formular befindet, öffnen.

Das Kombifeld übergibt einen Wert an eine Abfrage (über die Zwischenablage), diese ist die Grundlage für den Bericht, der über eine Schaltfläche (klick) geöffnet wird.
In die Abfrage wird der Wert über das Kriterium [**.value] übernommen.

Mit dem öffnen des Berichtes soll das Formular geschlossen werden - das ist mein Problem! Ich hatte ein Makro, dass beim Laden des Berichtes das Formular schloss, da war aber immer der Bericht leer, da wahrscheinlich nichts mehr in der Zwischenablage stand.
Wie kann ich das Formular schließen, (erst) wenn der gefüllte Bericht auf dem Bildschirm ist?

Danke Harald

Hallo,

ich möchte einen Bericht, über ein Kombinationsfeld, dass sich
auf einem Formular befindet, öffnen.

Benutz das „Nach Aktualisieren“-Ereignis des Kombifeldes.

Das Kombifeld übergibt einen Wert an eine Abfrage (über die
Zwischenablage), diese ist die Grundlage für den Bericht,

Zwischenablage ??

der
über eine Schaltfläche (klick) geöffnet wird.
In die Abfrage wird der Wert über das Kriterium [**.value]
übernommen.

??

Meinst Du damit (und mit der „Zwischenablage“) dass im Kriteriumsfeld in der Abfrage ein Formularrverweis auf das Kombi steht?

Dann wirf diesen Verweis dort heraus.

Mit dem öffnen des Berichtes soll das Formular geschlossen
werden - das ist mein Problem! Ich hatte ein Makro,

DAS ist das Problem!

dass beim
Laden des Berichtes das Formular schloss, da war aber immer
der Bericht leer, da wahrscheinlich nichts mehr in der
Zwischenablage stand.

versteh ich immer noch nicht…

Wie kann ich das Formular schließen, (erst) wenn der gefüllte
Bericht auf dem Bildschirm ist?

so:

Sub cmbKombi1_Afterupdate()
Docmd.Openreport „rptBericht“, acpreview,„Id=“ & Me!Kombi
Docmd.Close acform,Me.Name
End Sub

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Danke für die Antwort, aber mein Problem ist nicht gelöst.
Der Bericht öffnet sich auf der Basis einer Abfrage. Diese bekommt einen Wert aus dem Kombifeld übergeben (z.B. Forms!Formular1.Name.Value im Kriterium).

Meinst Du damit (und mit der „Zwischenablage“) dass im
Kriteriumsfeld in der Abfrage ein Formularrverweis auf das
Kombi steht?

Das mit dem „Afterupdate“ habe ich schon versucht, da kommt nur ein leerer Bericht raus.
Es muss doch etwas geben, womit man die Werte aus dem Kombifeld an die Abfrage geben kann und danach nach etwas Zeit das Formular schließt und auf der Grundlage der Abfrage der Bericht öffnet?

Gruß Harald

Hallo Harald,

Es muss doch etwas geben, womit man die Werte aus dem
Kombifeld an die Abfrage geben kann und danach nach etwas Zeit
das Formular schließt und auf der Grundlage der Abfrage der
Bericht öffnet?

kommt auf die Geschwindigkeit des PCs an.

Wenn du das Form zu schnell schließt, ohne das der Bericht alle Daten „gesammelt“ hat, kommt es zu einem leeren Bericht.

Du hast drei Möglichkeiten:

  1. im Bericht einbauen, dass das Formular geschlossen wird.
    (ist genau so unsicher wie alles andere)

  2. Das Formular nur ausblenden
    Das hat den Vorteil, dass du nachdem du den Bericht geschlossen hast, du das Formular nur einfach wieder einblenden kannst.

  3. du definierst eine globale Variable und speicherst den Wert dort hinein.

Grüße aus Rostock
Wolfgang
(Netwolf)

Danke für die Antwort, aber mein Problem ist nicht gelöst.

hast Du meinen Vorschlag überhaupt ausprobiert??

Der Bericht öffnet sich auf der Basis einer Abfrage. Diese
bekommt einen Wert aus dem Kombifeld übergeben (z.B.
Forms!Formular1.Name.Value im Kriterium).

Ja, das habe ich schon verstanden, und ich habe auch gesagt, dass Du diesen Verweis herauswerfen sollst…

Meinst Du damit (und mit der „Zwischenablage“) dass im
Kriteriumsfeld in der Abfrage ein Formularrverweis auf das
Kombi steht?

Das mit dem „Afterupdate“ habe ich schon versucht, da kommt
nur ein leerer Bericht raus.

und wie hat dieser Versuch ausgesehen (Code?)

Es muss doch etwas geben, womit man die Werte aus dem
Kombifeld an die Abfrage geben kann und danach nach etwas Zeit
das Formular schließt und auf der Grundlage der Abfrage der
Bericht öffnet?

gibt es schon (wie fast alles). Das heißt aber nicht, dass das nun zu empfehlen wäre.

Schreib
DoEvents
zwischen dem Berichtsaufruf und dem Schließen des Forms.

Und siehe weiterhin die Antwort von Netwolf.

Danke für Eure Antworten, ich werde diesmal probieren…

Harald

Leider konnte ich erst jetzt nochmals in meine DB schauen und es geht wahrscheinlich nur die 3. Variante von Dir, da über das Auswahlformular mehrere Berichte ausgewählt werden sollen.

  1. du definierst eine globale Variable und speicherst den Wert dort hinein.

Ich kann also nicht mit dem Kombifeld bei Afterupdate() schon einen Bericht auswählen, da dieser Wert an mehrere Berichte übergeben werden soll.

Kannst Du dies mit der globalen Variablen genauer erläutern, das Kriterium kommt aus der Abfrage und das Feld heißt dort „AS“.
Wie ist es denn, wenn in der Laufzeit mehrere Nutzer dieses Kombifeld betätigen, es kann dann doch vorkommen, dass ein falscher Bericht ausgewählt wird (das heißt mit dem falschen Kriterium „AS“)?

Gruß Harald

Hallo Harald,

Ich kann also nicht mit dem Kombifeld bei Afterupdate() schon
einen Bericht auswählen, da dieser Wert an mehrere Berichte
übergeben werden soll.

auch das wäre kein Problem wenn du das Formular verstecken würdest.

Kannst Du dies mit der globalen Variablen genauer erläutern,
das Kriterium kommt aus der Abfrage und das Feld heißt dort
„AS“.

„AS“ ist ein reserviertes Wort in Access und sollte niemals als Bezeichnung für ein Objekt verwendet werden.
Beispiel: Dim Test as String

Eine globale Variable definierst du z.B. im Codebereich deines Startformulars.
Beispiel: GLOBAL MeineVariable

Wie ist es denn, wenn in der Laufzeit mehrere Nutzer dieses
Kombifeld betätigen, es kann dann doch vorkommen, dass ein
falscher Bericht ausgewählt wird (das heißt mit dem falschen
Kriterium „AS“)?

das kommt auf dein Datenbankdesign an. Man sollte IMMER mit einem Frontend und einem Backend arbeiten. Dann stellt sich diese Frage erst gar nicht.

Grüße aus Rostock
Wolfgang
(Netwolf)