Am 14. August 2012 war es mal wieder soweit: Microsoft hat eine änderung an den ActiveX-Steuerelementen der Bibliothek MSCOMCTL.ocx vorgenommen, welche die meisten in Betrieb befindlichen TreeView- und ListView-Steuerelemente untauglich machte und zahlreichen Entwicklern tagelange Fehlersuche bescherte. Wir zeigen, wie die Probleme entstehen und wie Sie diese beheben können.
Die Bibliothek MSCOMCTL.ocx enthält ActiveX-Steuerelemente wie das TreeView-Steuerelement oder das ListView-Steuerelement. Mit einem Sicherheitsupdate hat Microsoft im August 2012 eine neue Version dieser Bibliothek geliefert, die allerdings je nach Office-Version nicht richtig registriert wurde.
Dies resultiert in verschiedenen Problemen, zum Beispiel:
- Fehler 2683, In diesem Steuerelement befindet sich kein Objekt.
- Benutzerdefinierte Ereignisprozeduren werden nicht mehr ausgeführt.
- Oder es erscheint die Meldung aus Bild 1, sobald Sie mit der Maus etwa ein ListView-Steuerelement überfahren.
- In einigen Fällen wir auch einfach der Verweis auf die Bibliothek MSCOMCTL.ocx im Verweise-Dialog als NICHT VORHANDEN gekennzeichnet – was wiederum zu Folgefehlern führt, die gar nicht mit dem ursprünglichen Problem zu tun haben. So erkennt Access beispielsweise einfache VBA-Befehle nicht mehr.

Bild 1: Fehler beim Einsatz einer mit der neuen Version kompilierten Datenbank mit der alten Version der Datei MSCOMCTL.ocx
Diese Probleme entstehen dadurch, dass die neue MSCOMCTL.ocx nicht ordnungsgemäß registriert beziehungsweise die alte nicht richtig aus der Registrierung entfernt wurde.
Dies äußert sich in einigen Fällen darin, dass die Registry unter dem Zweig HKEY_CLASSES_ROOT\TypeLib\{831FDD16-0C5C-11D2-A9FC-0000F8754DA1} nun zwei Elemente namens 2.0 und 2.1 enthält (s. Bild 2). In manchen Fällen war nach der Installation auch nur ein Eintrag vorhanden, nämlich 2.0.

Bild 2: Mögliche Registry-Konstellation nach Installation des Sicherheitsupdates
Mitunter scheint das Sicherheitsupdate und somit die neue Version gar nicht für die Probleme verantwortlich zu sein. Auf einer virtuellen Maschine erhielt ich beispielsweise die oben genannte Meldung, obwohl dort nachweislich die Version 6.1.98.33 installiert war – die neue Version heißt 6.1.98.34. Möglicherweise resultieren solche Probleme daraus, dass Sie eine Anwendung auf einem Rechner mit der neuen Version der MSCOMCTL.ocx kompilieren, diese auf dem Zielsystem aber nicht vorhanden ist.
In diesem Fall reichte es, einfach nur die neueste Version der MSCOMCTL.ocx über die vorhandene Version zu kopieren beziehungsweise die vorhandene Version umzubenennen und die neue in das Verzeichnis der Systemdateien zu kopieren!
Wir haben es also eigentlich mit zwei verschiedenen Problemen zu tun:
- Variante I: die Version 6.1.98.34 der Datei MSCOMCTL.ocx wird installiert, aber nicht richtig registriert beziehungsweise die Vorgängerversion nicht korrekt entfernt oder
- Variante II: ein mit der neuen Version kompiliertes Projekt landet auf einem System, das noch nicht mit der neuen Version ausgestattet ist und verursacht Probleme.
Lösung des Problems, Variante I
Für meine Anwendungen, die ich bei Kunden und bei mir einsetze, habe ich nun folgende Lösung gefunden, die bisher in allen Fällen geholfen hat:
- Wenn ein Zweig namens 2.0 vorhanden ist, muss dieser entfernt werden.
- Der Zweig 2.1 muss nochmals erneuert werden.
Dies können Sie auf verschiedene Arten erreichen. Eine einfache Methode ist es, einfach die Registry zu öffnen, das Element mit dem Namen 2.0 samt Unterelementen zu entfernen und durch Registrieren der neuen Version der Datei MSCOMCTL.ocx den Zweig 2.1 neu hinzuzufügen (dies ist nötig, falls dieser noch nicht vorhanden ist).
Nun ist es für einen Entwickler einfach, dies auf dem eigenen Rechner auszuführen. Und per Fernwartung lassen sich die notwendigen Schritte auch schnell auf einem Kundenrechner ausführen. Aber was tun, wenn die Anwendung auf hunderten Kundenrechnern läuft Sie können sich wohl kaum auf all diesen Rechnern einloggen und den Fehler beheben. Und dummerweise gibt es auch noch keine Skript-Lösung, die sich nicht ohne Administrator-Rechte durchführen lässt.
Also wollen wir es dem Benutzer zumindest möglichst einfach machen – ohne manuelle Eingriffe in die Registry.
Sie benötigen dazu zunächst eine ältere Version der MSCOMCTL.ocx, um die Registrierungseinträge für die alte Version auf einfache Weise zu entsorgen. Sie finden die Version 6.1.98.33 im Download zu diesem Beitrag.
Diese kopieren Sie in das Verzeichnis der Systemdateien, je nach Windows-Version eines der folgenden (gegebenenfalls sichern Sie die aktuelle Version der MSCOMCTL.ocx):
- 32-bit: c:\Windows\System32
- 64-bit: c:\Windows\SysWow64
Danach öffnen Sie die Eingabeaufforderung mit Administrator-Rechten. Dies erledigen Sie, indem Sie mit der rechten Maustaste auf den entsprechenden Eintrag im Startmenü klicken und dort den Eintrag Als Administrator ausführen … betätigen (s. Bild 3). In der Eingabeaufforderung registrieren Sie dies alte Version der MSCOMCTL.ocx und entfernen anschließend die Registrierung wieder. Für Windows in der 64-bit-Version geht dies mit den folgenden beiden Befehlen:
Nur für Abonnenten
Ab hier wird’s wirklich spannend – der Rest ist exklusiv für Abonnenten.
Mit dem Abo von Access im Unternehmen bekommst du den kompletten Artikel – inklusive vollständigem Code, Beispieldatenbank und Schritt-für-Schritt-Erklärung.
So sparst du dir stundenlanges Herumprobieren, vermeidest teure Fehler in deiner Access-Anwendung und kannst Lösungen direkt in deinem Unternehmen einsetzen, statt nur darüber zu lesen.
Teste Access im Unternehmen jetzt 4 Wochen lang kostenlos: Voller Zugriff auf alle Artikel, Downloads und Beispieldatenbanken. Kein Risiko – wenn es für dich nicht passt, kündigst du einfach innerhalb der ersten vier Wochen.
Bereits Abonnent? Hier einloggen
Kostenlos & unverbindlich
Oder hast Du eine konkrete Frage zu Deiner eigenen Access-Anwendung?
Vielleicht stellt Deine Anwendung Dich vor eine Herausforderung, zu der Du bisher keine Lösung findest. Schlechte Performance, kein ausreichender Zugriffsschutz, Du bist unsicher über Dein Datenmodell oder Dein Code liefert unerklärliche Fehler?
In unserem kostenlosen Access-Audit schaut sich André Minhorst persönlich gemeinsam mit Dir Deine Lösung per Zoom an – und zeigt Dir, wo Datenmodell, VBA-Code, Ergonomie und Sicherheit Optimierungspotenzial bieten.
Jetzt kostenloses Access-Audit anfordern →