Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Access 2010 Ribbon Callback

Begonnen von Hondo, November 16, 2025, 16:02:50

⏪ vorheriges - nächstes ⏩

Hondo

Hallo,
in einer Anwendung öffne ich ein Bericht in der Vorschau und blende den Standard-Ribbon wieder ein der zuvor minimiert wurde.
Bei Klick auf "Vorschau schließen" möchte ich eigentlich den Bericht schließen. Wie kann ich diesen Callback erfassen mit welchem Eventhandler?

Gruß Andreas

Bitsqueezer

Hallo,

soweit ich weiß, gar nicht. Denn es ist das Standard-Ribbon und da blendest Du nur entweder das ganze Ribbon oder einzelne Buttons ein, die dann von MS-Code verwaltet werden.

Wenn Du das also selbst machen möchtest, mußt Du ein eigenes Ribbon-Menü schreiben und eigene Buttons. Du kannst hier auch die Standardbuttons mit einbauen, die Du nicht selbst programmieren willst, aber so kannst Du eben auch einen eigenen "Vorschau schließen"-Button bauen, den Du mit üblichen Callbacks abfangen kannst. Der kann optisch ja genauso aussehen wie der originale.

Gruß

Christian

Knobbi38

Zitat von: Hondo am November 16, 2025, 16:02:50Bei Klick auf "Vorschau schließen" möchte ich eigentlich den Bericht schließen.

Das Fragestellung ist etwas missverständlich. Beim Klick auf "PrintPreviewClose" wird doch der Bericht geschlossen, warum dann noch eine Callback?


Hondo

Hallo,
habe folgenden Code im Bericht:
Private Sub Report_Load()
    DoCmd.OpenForm "frmDruckauswahl", acNormal, , , , acDialog
    Me.RecordSource = Druckauswahl
    Me.lblDruckdatum.Caption = "Zell am Harmersbach, den " & pPrintDate
    Me.TimerInterval = 200
End Sub

Das Dialog-Form frmDruckauswahl setzt einen SQL-String bei Klick auf "Bericht Drucken" zusammen und übergibt diesen an den Bericht für die Recordsource.

Dann soll der Bericht in der Seitenansicht angezeigt werden. Das geht nur in einem späteren Eventhandler, daher der Timer:
Private Sub Report_Timer()
    Me.TimerInterval = 0
    DoCmd.RunCommand acCmdPrintPreview
    DoEvents
    DoCmd.ShowToolbar "Ribbon", acToolbarYes
    SendKeys "^{F1}"
End Sub
Jetzt soll der Anwender ausdrucken und den Bericht wieder schließen können.
Dazu gibts im Standard-Ribbon kein Button. Nur rechts der Button "Seitenansicht schließen", der schließt aber nicht den Bericht sondern nur die Seitenansicht. Und eben dieses Event möchte ich abfangen um per Code den Bericht zu schließen.

Gruß Andreas

Knobbi38

#4
Hi,

du änderst die Recordsource im Report_Load Event?

Lade mal eine Beispiel-DB hier hoch, damit man das auch mal nachvollziehen kann, denn für gewöhnlich lässt sich die Recordsource eines Berichts nach dem Laden der Daten nicht mehr verändern und bei einem Klick auf "Seitenansicht schließen" wird zumindest bei mir der Bericht auch geschlossen.

Knobbi38

Bitsqueezer

Hallo,

wenn Du "acDialog" verwendest, wartet der Code auf die Beendigung von "frmDruckauswahl", aller Code danach wird also erst dann ausgeführt. Daher weiß ich nicht, was Du mit Timer-Ausführung meinst.

Bei Reports gilt generell: Alles, was man für den Bericht vorbereiten will, gehört in Report_Open, auch weil man da noch "Cancel" zur Verfügung hat.

Report_Load ist in den meisten Fällen nutzlos.

SendKeys...brrrr... :)

Gruß

Christian

PhilS

Zitat von: Hondo am November 17, 2025, 12:57:33Dazu gibts im Standard-Ribbon kein Button. Nur rechts der Button "Seitenansicht schließen", der schließt aber nicht den Bericht sondern nur die Seitenansicht. Und eben dieses Event möchte ich abfangen um per Code den Bericht zu schließen.
Zum Drucken aus der Vorschau gibt es einen Button im Standard-Ribbon für die Berichtsvorschau. Der Vorschau Schließen Button schließt den Bericht, wenn dieser direkt in der Vorschau geöffnet wurde.

Gibt es einen Grund, dass du nicht erst deinen Dialog Druckauswahl öffnest und erst danach, basierend auf der Benutzerauswahl, den Report direkt in der Vorschau?

Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Hondo

#7
Hallo,
der Grund ist, dass man auswählen kann was gedruckt werden soll. Also z.B: Urkunden aller Plazierungen, oder nur die ersten 2 Plätze z.B.
Der Bericht wird normal aufgerufen aber natürlich nicht angezeigt bis das Dialog-Formular wieder geschlossen wird. Und es ist wirklich so, klicke ich auf Seitenansicht schließen wird die Berichtsansicht angezeigt.

Und wenn ich den Code aus dem Timerevent in das Event Report_Load() schreibe wird die Seitenansicht des Berichtes nicht geöffnet.

Hab jetzt ein eigenen Ribbon erstellt mit den Buttons Schließen und Drucken.
Nur das mit dem Drucken funktioniert noch nicht ganz.

Testversion kann ich nicht erstellen auf die Schnelle, ist einfach zu groß.
Gruß Andi

BTW: wenn ich zuerst das Formular aufrufe und aus diesem den Bericht als acViewPreview dann kann ich die Datenherkunft nicht mehr ändern. Daher muss ich den Bericht in der Berichtsansicht aufrufen und per Code in die Seitenansicht umschalten.

PhilS

Zitat von: Hondo am November 17, 2025, 16:34:12der Grund ist, dass man auswählen kann was gedruckt werden soll. Also z.B: Urkunden aller Plazierungen, oder nur die ersten 2 Plätze z.B.
Zumindest für das konkrete Beispiel wäre das aber über die Kriterien, d.h. das WhereCondition-Argument von DoCmd.OpenReport, möglich. 

Zitat von: Hondo am November 17, 2025, 16:34:12Der Bericht wird normal aufgerufen aber natürlich nicht angezeigt bis das Dialog-Formular wieder geschlossen wird. Und es ist wirklich so, klicke ich auf Seitenansicht schließen wird die Berichtsansicht angezeigt.
Wenn du erst die Berichtsansicht öffnest und dann erst zur Vorschau wechselst, ja.  Wenn der Bericht von vornherein in der Vorschau geöffnet war, schließt er sich komplett.


Zitat von: Hondo am November 17, 2025, 16:34:12Und wenn ich den Code aus dem Timerevent in das Event Report_Load() schreibe wird die Seitenansicht des Berichtes nicht geöffnet.

Wahrscheinlich, weil sich das DoCmd.RunCommand acCmdPrintPreview in diesem Moment noch nicht auf den aktuellen Bericht beziehen kann weil dieser noch nicht vollständig geöffnet ist.


Zitat von: Hondo am November 17, 2025, 16:34:12BTW: wenn ich zuerst das Formular aufrufe und aus diesem den Bericht als acViewPreview dann kann ich die Datenherkunft nicht mehr ändern. 
Im Report_Open-Ereginis sollte es noch funktionieren, die Datenherkunft zu ändern. Danach dann nicht mehr.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Knobbi38

Zitat von: Hondo am November 17, 2025, 16:34:12wenn ich zuerst das Formular aufrufe und aus diesem den Bericht als acViewPreview dann kann ich die Datenherkunft nicht mehr ändern.
Natürlich läßt sich die Datenherkunft per Openargs übergeben und damit ändern.

Knobbi38