Ein Bericht bricht in der ACCDE mit Fehler 459 („Object or class does not support the set of events“) ab
Umgebung
Microsoft 365 Access 16.0.20527, 32 Bit. Ein Bericht, der ein ActiveX-Steuerelement enthält und ein eigenes VBA-Modul hat (Enthält Modul = Ja), kompiliert in eine ACCDE. Das Steuerelement muss kein WKL-Steuerelement sein: Derselbe Fehler tritt mit dem Windows Media Player und der Befehlsschaltfläche von Microsoft Forms 2.0 auf. Formulare sind nicht betroffen.
Der Bericht druckt in der ACCDB. In der ACCDE (und in der Access Runtime) bricht er gleich beim Öffnen ab, mit dem Fehler 2473, der sein erstes Ereignis nennt (in englischem Access: „The expression On Format you entered as the event property setting produced the following error: Object or class does not support the set of events“), oder mit dem VBA-Fehler 459 mit demselben Text.
Ursache
Ein Fehler in Access. Die ACCDE enthält ein falsch kompiliertes Berichtsmodul, wenn das Modul in derselben Entwurfssitzung entstanden ist, in der die Datenherkunft des Berichts festgelegt oder geändert wurde, und der Bericht ein ActiveX-Steuerelement enthält. Der Fehler kommt von Access, bevor eine Prozedur des Berichts läuft; das Steuerelement selbst wird nicht aufgerufen.
So verhält sich Access, jede Abfolge in einer eigenen Datenbank:
| Abfolge in der Entwurfsansicht | ACCDE |
|---|---|
| Datenherkunft und Modul in einer Entwurfssitzung (speichern, schließen) | scheitert |
| Datenherkunft in einer Sitzung, Modul in einer späteren | druckt |
Der ganze Bericht mit LoadFromText erstellt (der Text enthält Datenherkunft, ActiveX-Steuerelement und Modul) | scheitert |
| Derselbe Text ohne sein Modul, das Modul in einer späteren Sitzung hinzugefügt | scheitert |
| Derselbe Text ohne seine Datenherkunft, die Datenherkunft in einer späteren Sitzung festgelegt | scheitert |
Ein scheiternder Bericht erneut gespeichert, seinem Modul ein Kommentar hinzugefügt, oder erneut SaveAsText und LoadFromText | scheitert weiterhin |
| Ein scheiternder Bericht: Enthält Modul in einer Sitzung auf Nein gesetzt, das Modul in einer späteren angelegt | druckt |
Weil LoadFromText den ganzen Bericht auf einmal erstellt, scheitert in der ACCDE jeder Bericht mit
ActiveX-Steuerelement und Modul, den ein Build aus Textquellen erstellt, sofern der Build ihn nicht repariert.
Lösung
Mit dem Build-Werkzeug gebaut: Das Build-Werkzeug der WKL Forms Object Library (tools/build/Build-AccessApp.ps1)
repariert solche Berichte selbst: Nachdem es einen Bericht mit ActiveX-Steuerelement und Modul geladen hat, entfernt
es das Modul in einer Entwurfssitzung und legt es in einer zweiten mit demselben Code und denselben
Ereigniseigenschaften wieder an. Bauen Sie erneut und erstellen Sie die ACCDE erneut; an den Quellen ändert sich
nichts.
Ohne Berichtsmodul: Ein Bericht, dessen Ereignisse Ausdrücke sind, die öffentliche Funktionen eines
Standardmoduls aufrufen (zum Beispiel die Ereigniseigenschaft Beim Formatieren des Detailbereichs
=FormatStelle()), hat kein eigenes Modul und ist nicht betroffen.
Messanzeigen und Diagramme in einem Bericht drucken
zeigt diese Form; sie gilt auch für Berichte, die in Access von Hand erstellt werden.