Hallo,
Wie lautet der VBA-Befehl zum Schließen eines Berichtes? Bei
DoCmd.Close "REPrepariert"
kommt die Fehlermeldung "Laufzeitfehler 13: Typen unverträglich."
Vielen Dank im Voraus
Beate1953
Hallo,
DoCmd.Close acReport, "REPrepariert"
mit einem Leerzeichen nach Close erhältst Du eine Liste der Möglichkeiten. Der Befehl ist relativ selbsterklärend.
Hallo,
vielen Dank für die Hilfe. Aber jetzt habe ich ein anderes Problem damit . Am Besten, ich erkläre das mal ausführlicher:
Ich habe im Ereignis "Beim Öffnen" eines Berichtes als Datensatzquelle einen SQL-String erstellt. Anschließend wird abgefragt, ob überhaupt Datensätze gefunden wurden. Wurden keine Datensätze gefunden, erscheint meine Meldung und danach öffnet sich der leere Bericht(nur Berichtskopf und Seitenkopf). Der Code lautet folgendermaßen:
(http://me.recordsource=sqlstr
Ich möchte nun, dass bei Fehlen von Datensätzen der Bericht gleich wieder geschlossen wird und nicht leer angezeigt/gedruckt wird. Dies wollte ich durch einfügen des DoCmd-Befehls erreichen. Aber dann erscheint die Fehlermeldung "Diese Aktion kann nicht ausgeführt werden, solange ein Formular- oder Berichtsereignis verarbeitet wird."
Was muss ich eingeben, damit Access den Bericht gleich wieder schließt, wenn keine Datensätze vorhanden sind?
Viele Grüße
Beate1953
Hallo,
Sorry, der Code wurde irgendwie nicht angezeigt. Hier ist er nun, ansonsten steht alles in der vorigen Antwort:
Me.RecordSource = SQLstr
Set rs = CurrentDb.OpenRecordset(SQLstr, dbOpenSnapshot)
If rs.BOF And rs.EOF Then
MsgBox "Für den von Ihnen gewählten Zeitraum sind keine Datensätze vorhanden"
DoCmd.Close acReport, "REPrepariert"
End If
rs.Close
Set rs = Nothing
End Sub
Danke für Eure Hilfe
Beate1953
Hi,
prüfst Du nicht vor dem Aufruf des Berichts, ob Datensätze da sind.
Somit könnte sich das Schließen von etwas, das gar nicht geöffnet wurde, erübrigen.
Harald
Hallo,
ein Bericht hat auch das Ereignis "Bei ohne Daten", das man für solche Zwecke einsetzen könnte....
Hallo,
und was schreibe ich in das Ereignis "Bei ohne Daten"?
Mit
Private Sub Report_NoData(Cancel As Integer)
DoCmd.Close acReport, "REPRepariert"
End Sub
bekomme ich wieder die Fehlermeldung "Diese Aktion kann nicht ausgeführt werden, solange ein Formular- oder Berichtsereignis verarbeitet wird."
Was kommt da rein, damit sich der Bericht wieder schließt? Irgendwie muss das anscheinend außerhalb eines Berichtsereignisses geschehen, aber wie?
Viele Grüße
Beate1953
Hallo,
Private Sub Report_NoData(Cancel As Integer)
MsgBox "Für den von Ihnen gewählten Zeitraum sind keine Datensätze vorhanden"
Cancel = True
End Sub
Mit Cancel = True wird der Bericht erst gar nicht geöffnet bzw. das Öffnen abgebrochen.
Hallo,
jetzt klappt es, wenn ich bei dem sich öffnenden Drucker-Dialogfenster "Abbrechen" anklicke. Wenn ich auf "OK" klicke, druckt Access das Formular, aus dem heraus REPRepariert geöffnet wird. Das liegt daran, dass ich den Bericht mit einem Makro (vom Steuerelemente-Assistenten erstellt) öffne, der im ersten Befehl den Bericht öffnet und im zweiten Befehl "DruckenObjekt" das aktuelle Objekt druckt -- und wenn sich der Bericht gar nicht erst öffnet, druckt er das Formular.
Wenn ich alternativ den Bericht per VBA mit DoCmd.OpenReport "REPRepariert" öffne, zeigt er zuerst die gewünschte Meldung an, dass keine Datensätze vorhanden sind. (Im Hintergrund sieht man ein kleines Fenster mit der Meldung "Druck von "REPRepariert auf DruckerXY") . Wenn ich die Meldung mit den Datensätzen mit OK bestätige, erscheint als Nächstes die Fehlermeldung "Laufzeitfehler 2501: Die Aktion OpenReport wurde abgebrochen".
Muss ich den Bericht per VBA mit einem anderen Kommando starten? Vielleicht ein Print-Kommando oder so?
Viele Grüße
Beate1953
Hallo,
setz mal vor
Docmd.Openreport "REPRepariert"
ein
On Error Resume Next
Der kurz aufpoppende Druckhinweis wird wohl nicht (einfach) zu unterdrücken sein.
Um diesen Dingen aus dem Weg zu gehen, wäre das Prüfen auf keine Datensätze vor Docmd.Openreport (wie schon von Harald angedeutet) angeraten.
.
.
.
If Dcount ("*","Berichtsabfrage") > 0 Then DoCmd.OpenReport "REPRepariert"
' Wenn die Kriterien allein in der "Berichtsabfrage" vorhanden sind.
.
Hallo,
wenn ich Resume Next mache und If DCount("*", "QRYFuerSQLstr") THEN ...dann klappt es jetzt prima. Ich brauche aber für DCount noch Bedingungen, da die Recordsource des Berichtes auch Bedingungen hat. Wenn ich untenstehenden Code schreibe, kommt immer die Fehlermeldung "Erwartet: Listentrennzeichen oder )" und der Cursor steht auf dem ersten Unterstrich. Ist das mit dem Unterstrich etwa falsch um einen langen String auf mehrere Zeilen zu verteilen? Das mit SQLstr = SQLstr & "..." geht hier ja wohl nicht.
If DCount("*", "QRYFuerSQLstr", "([E-Check].[E-Check] = 'Ja*' OR [E-Check].[E-Check] LIKE 'N*') AND _
[E-Check].Repariert = True AND (Posten.Entfernen = False) AND _
[E-Check].Datum Between " & Format(Anfdat, "\#yyyy-mm-dd\#") & " AND " & Format(Enddat, "\#yyyy-mm-dd\#"))") > 0 Then
Was meinst Du mit: Wenn die Kriterien allein in der "Berichtsabfrage" vorhanden sind.
Viele Grüße
Beate1953
Hallo,
der Unterstrich gilt nur in VBA (-Codezeilen) und nicht in SQL-Strings (bzw. Where-Conditions-Strings, was ja der 3. Parameter bei DCount bedeutet):
If DCount("*", "QRYFuerSQLstr", "([E-Check].[E-Check] = 'Ja*' OR [E-Check].[E-Check] LIKE 'N*') AND " & _
" [E-Check].Repariert = True AND (Posten.Entfernen = False) AND " & _
" [E-Check].Datum Between " & Format(Anfdat, "\#yyyy-mm-dd\#") & " AND " & Format(Enddat, "\#yyyy-mm-dd\#"))") > 0 Then
ZitatWas meinst Du mit: Wenn die Kriterien allein in der "Berichtsabfrage" vorhanden sind.
genau das: da die Recordsource des Berichtes auch Bedingungen hat
warum nimmst Du nicht die
Berichtsabfrage für Dcount????
Hallo,
jetzt klappt alles. Vielen herzlichen Dank!
Viele Grüße
Beate1953