Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Mit VBA-Befehl Bericht schließen

Begonnen von Beate1953, November 21, 2013, 13:15:28

⏪ vorheriges - nächstes ⏩

Beate1953

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

MzKlMu

Hallo,
DoCmd.Close acReport, "REPrepariert"
mit einem Leerzeichen nach Close erhältst Du eine Liste der Möglichkeiten. Der Befehl ist relativ selbsterklärend.
Gruß Klaus

Beate1953

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:



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

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

bahasu

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
Servus

DF6GL

Hallo,

ein Bericht hat auch das Ereignis "Bei ohne Daten", das man für solche Zwecke einsetzen könnte....

Beate1953

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

MzKlMu

#7
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.
Gruß Klaus

Beate1953

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

DF6GL

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.
.

Beate1953

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

DF6GL

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????


Beate1953

Hallo,

jetzt klappt alles. Vielen herzlichen Dank!

Viele Grüße
Beate1953