Kopieren und Einfügen scheitern nach vielen Access-Sitzungen
Kopieren und Einfügen funktionieren in keinem Programm der Windows-Sitzung mehr, auch außerhalb von Access; Access meldet bei Automatisierungs- oder DDE-Aufrufen den Fehler 0x80070008 („nicht genügend Arbeitsspeicher“) und verhält sich unberechenbar.
Umgebung
Windows 10 und 11 mit Microsoft 365 Access, auf PCs, auf denen Access in einer Windows-Sitzung sehr oft gestartet und beendet wird, zum Beispiel durch einen geplanten Auftrag oder automatisierte Tests. Nicht spezifisch für die WKL-Steuerelemente.
Ursache
Windows führt je Sitzung eine globale Atomtabelle mit 16.384 Einträgen; ein Eintrag wird erst frei, wenn sein Besitzer ihn löscht oder der Benutzer sich abmeldet. Mit Access sammeln sich zwei Arten von Einträgen an:
- Jedes Access, das mit
Quitendet, hinterlässt einen EintragMSAccess<process id>; ein im Task-Manager beendetes Access hinterlässt keinen. - Barrierefreiheitsanfragen an ein Access-Datenblatt (eine Tabelle, eine Abfrage, ein Unterformular in der Datenblattansicht) hinterlassen einen Eintrag
MSAA:..., wenn das anfragende Programm die Antwort nie abholt. Solche Einträge stammen vom eigenen Datenblattfenster von Access, auch in einer Datenbank ganz ohne WKL-Steuerelement; die Fenster der WKL-Steuerelemente beantworten solche Anfragen, ohne Einträge zu hinterlassen.
Ist die Tabelle voll, scheitern die Zwischenablage (OLE-Kopieren und -Einfügen, auch zwischen anderen Programmen), DDE und manche Automatisierungsaufrufe.
Lösung
- Melden Sie sich bei Windows ab und wieder an, oder starten Sie neu: Nur so wird die Tabelle geleert.
- Für Aufträge, die Access automatisieren: Beenden Sie Access mit
Quitund warten Sie, bis der Prozess beendet ist, und starten Sie nicht für jeden kleinen Schritt ein neues Access. - Für Werkzeuge, die Access über UI Automation lesen: Suchen Sie die Fenster Ihres eigenen Access-Prozesses über ihr Handle, statt den ganzen Desktop zu durchsuchen, und fragen Sie kein beschäftigtes oder hängendes Fenster an.