Hallo zusammen,
Ich habe ein Formular mit einem Unterformular.
In diesem Unterformular können mehrere Aufgaben zum jeweiligen Datensatz anfallen.
Aus diesem Formular heraus erzeuge ich einen Bericht in Format PDF und sende in per E-Mail.
Im Bericht steht laut meiner Auswahl genau das was ich wollte.
Der VBA Code dazu:
DoCmd.OpenReport "rptAufgaben", acViewReport, windowmode:=acHidden, WhereCondition:="[Nummer] = '" & Me![Nummer] & "'"
DoCmd.SendObject acSendReport, "rptAufgaben", acFormatPDF
DoCmd.Close acReport, "rptAufgaben"
Wenn Daten vorhanden sind läuft alles so wie ich es vorgesehen habe.
Es werden nur die Daten des Steuerelements "Nummer" im Bericht angezeigt.
Im Bericht selber habe ich als Ereignisprozedur die "Report_noData" verwendet.
Da kommt dann auch die Meldung das der Bericht keine Daten enthält.
Nun mein Problem:
Wenn aber der Bericht lt. meiner vorherigen Auswahl leer ist, wird er trozdem erzeugt, allerdings mit allen vorhandenen Daten der übrigen Hauptdatensätze.
Kann man das irgendwie lösen das wenn der Bericht leer ist, die weitere Verabreitung (trotz be-ja-ung des Abruches) unterbrochen wird?
Vielen Dank schon einmal.
Grüße HubertN
Hallo Hubert,
Diese Prozedur bietet dir den Cancel-Parameter an. Dieser dient,
wie in allen anderen Prozeduren, die ihn anbieten, dazu die Aus-
führung des Codes zu beenden
Private Sub Report_NoData(Cancel As Integer)
If Me.HasData Then
'Deine DoCmd-Befehle
'weiterer Code
Else
Cancel = True
End If
End Sub
gruss ekkehard
Hallo ekkehard,
zuerst einmal Danke für deinen Tipp.
Aber irgendwie bekomme ich das nicht hin.
Ich habe auf der einen Seite ein Formular mit einem Button der
mir mit den ausgewählten Daten einen Bericht "erzeugt".
Jetzt kommt der Bericht ins Spiel - wenn der Bericht keine Daten enthält, soll
das Ganze abgebrochen werden.
IST Stand: wenn im Unterformular keine Daten enthalten sind, wird ein Bericht mit
allen Daten der übrigen Datensätzen angezeigt.
Aber vielleicht habe ich auch deinen Code nicht richtig verstanden bzw. umgesetzt.
Grüße HubertN
Hallo,
besser wäre, vor dem Aufruf des Reports nachzusehen (mit z. B. Dcount()), ob es DS gibt und dann zu entscheiden, ob der Report geöffnet werden soll oder nicht.
Hallo Hubert,
ZitatAber irgendwie bekomme ich das nicht hin.
Ist ja auch völliger Quatsch, was ich da geschrieben habe; - Asche auf
mein Haupt.
Bei dem Ereignis ist der Report ja schon geöffnet.
Also so machen, wie von Franz vorgeschlagen.
gruss ekkehard
Danke an euch beide,
aber Franz kannst du mir hierzu einen Anstoß (Code) dazu geben.
Mein Code ist im ersten Kommentar enthalten.
Gr. HubertN
Hallo,
einfach vorher zählen:
If DCount("*","Tabellenname","[Nummer] = '" & Me![Nummer] & "'") = 0 Then
MsgBox "Der Bericht enthält keine Daten"
Exit Sub
End If
DoCmd.OpenReport "rptAufgaben", acViewReport, windowmode:=acHidden, WhereCondition:="[Nummer] = '" & Me![Nummer] & "'"
DoCmd.SendObject acSendReport, "rptAufgaben", acFormatPDF
DoCmd.Close acReport, "rptAufgaben"
Den Code zum Ereignis "Bei ohne Daten" kannst Du löschen.
PS:
Warum nennst Du ein Feld das als Textfeld angelegt ist "Nummer" ?
Hallo Klaus,
danke für deinen Beitrag, werde es morgen testen.
Zu deiner Frage:
Ich frage eine Nummer ab und filtere dann danach.
Textfeld da Alphanummerisch.
Grüße HubertN
Hallo Klaus,
habe es so umgesetzt und funktioniert genau wie
ich mir es vorgestellt habe.
Ein kleiner Schönheitsfehler im Code nach "Tabellenname" ; kein Semikolon sondern ein ,
Vielen Dank an dich
und an die Community.
Grüße HubertN
PS: Finde den Knopf "Thema gelöst" leider nicht.
Hallo,
das Semikolon war ein Tippfehler, danke für den Hinweis. Habe es oben noch ausgebessert.