Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 6/2012.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Lösen Sie Probleme mit dem TreeView oder ListView, die durch ein Sicherheitsupdate von Microsoft im August 2012 entstanden sind.

Techniken

VBA, ActiveX

Voraussetzungen

Access 2000 und höher

Beispieldateien

MSCOMCTL.ocx in der Version 6.1.98.33 und 6.1.98.34

Shortlink

www.access-im-unternehmen.de/861

Probleme mit TreeView, ListView und Co. beheben

André Minhorst, Duisburg

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 Abb. 1, sobald Sie mit der Maus etwa ein ListView-Steuerelement überfahren.
  • pic002.png

    Abb. 1: Fehler beim Einsatz einer mit der neuen Version kompilierten Datenbank mit der alten Version der Datei MSCOMCTL.ocx

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

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. Abb. 2). In manchen Fällen war nach der Installation auch nur ein Eintrag vorhanden, nämlich 2.0.

pic001.png

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

pic003.png

Abb. 3: Eingabeaufforderung als Administrator starten

RegSvr32.exe c:\Windows\SysWow64\MSCOMCTL.ocx

RegSvr32.exe -u c:\Windows\SysWow64\MSCOMCTL.ocx

Für Windows in der 64-bit-Version führen Sie folgende Anweisungen durch:

RegSvr32.exe c:\Windows\System32\MSCOMCTL.ocx

RegSvr32.exe -u c:\Windows\System32\MSCOMCTL.ocx

Dies entfernt den Schlüssel der alten Version aus der Registry, also den mit dem Wert 2.0.

Anschließend kopieren Sie die im Download enthaltene Version 6.1.98.34, also die neue Version, in das Verzeichnis c:\Windows\System32 (32-bit) oder c:\Windows\SysWow64 (64-bit).

Diese registrieren Sie dann ganz einfach mit dem Befehl

RegSvr32.exe c:\Windows\SysWow64\MSCOMCTL.ocx

für Windows mit 64-bit oder mit

RegSvr32.exe c:\Windows\System32\MSCOMCTL.ocx

für Windows mit 32-bit.

Lösung des Problems, Variante II

Sie löschen die alte Version der Datei MSCOMCTL.ocx oder benennen diese um und kopieren die im Download zu diesem Beitrag befindliche aktuelle Version in das Verzeichnis der Systemdateien. Für 64-bit-Windows heißt dieses Verzeichnis wie folgt:

c:\Windows\SysWow64

Bei der 32-bit-Version von Windows ist dieses Verzeichnis relevant:

c:\Windows\System32

Dies behebt zumindest den Fehler aus der Abbildung. Allerdings werden noch immer keine benutzerdefinierten Ereignisprozeduren ausgelöst. Dies erreichen Sie durch Entfernen der alten Registrierungseinträge und Neur-Registrieren der neu hinzugefügten Version der MSCOMCTL.ocx. Beim 64-bit-Windows verwenden Sie diese beiden Anweisungen:

RegSvr32.exe -u c:\Windows\SysWow64\MSCOMCTL.ocx

RegSvr32.exe c:\Windows\SysWow64\MSCOMCTL.ocx

Für die 32-bit-Version kommen diese Befehle zum Einsatz:

RegSvr32.exe -u c:\Windows\System32\MSCOMCTL.ocx

RegSvr32.exe c:\Windows\System32\MSCOMCTL.ocx

Zusammenfassung und Ausblick

Microsoft hat den Access-Entwicklern mit diesem Sicherheitsupdate ein echtes Ei ins Nest gelegt. Wenn dies bei Ihnen eines der genannten Probleme verursacht, probieren Sie die hier beschriebenen Lösungsvorschläge aus.

Sollte etwas nicht wie hier beschrieben funktionieren, melden Sie sich einfach unter info@access-im-unternehmen.de.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Download

Download

Die .zip-Datei enthält folgende Dateien:

MSCOMCTL.6.1.98.34.OCX

MSCOMCTL.6.1.98.33.OCX

Beispieldateien downloaden

© 2003-2015 André Minhorst Alle Rechte vorbehalten.