„Methode oder Datenobjekt nicht gefunden“ für ein Steuerelement auf einer UserForm
Auf einer UserForm in Excel, Word oder Outlook bricht VBA das Kompilieren an einer Zeile wie
UserForm1.List1.LinkChildFields = "OrderID" mit Methode oder Datenobjekt nicht gefunden ab (englisch: Method or
data member not found). Andere Member desselben Steuerelements lassen sich kompilieren, der Objektkatalog führt den
Member auf, und dieselbe Zeile funktioniert in Access.
Umgebung
Microsoft 365 Office, Excel und Word (32 Bit), UserForms (MSForms), auf einem Rechner, auf dem die WKL Forms Object Library auf einer UserForm verwendet wurde, bevor sie auf einen Build mit neuen Membern unter derselben Version der Typbibliothek aktualisiert wurde. Access-Formulare sind nicht betroffen. Jedes Release mit einer Änderung der Schnittstelle erhöht die Version der Typbibliothek; ein korrekt registriertes Release zeigt das Symptom daher nicht.
Ursache
Office hält ab dem ersten Platzieren eines ihrer Steuerelemente auf einer UserForm eine Kopie einer Typbibliothek je
Bibliotheks-ID und Version. Member, die der Bibliothek später unter derselben Version hinzugefügt werden, bleiben dem
VBA-Compiler unbekannt, wenn er UserForm1.List1.Member auflöst; eine Variable vom eigenen Typ des Steuerelements
findet sie weiterhin, weil sie über den Verweis gebunden wird. Das Löschen der MSForms-Cachedateien
(%TEMP%\VBE\*.exd) hilft nicht. Eine neue Versionsnummer macht die Member sofort sichtbar. Access liest die
Typbibliothek neu und zeigt das Symptom nie.
Das Produkt erhöht die Version bei jeder Änderung der Schnittstelle, und die Registrierung entfernt andere Versionen der Bibliothek. Das Symptom tritt deshalb nur auf, wenn noch ein älterer Build registriert ist oder ein Build registriert wurde, ohne dass seine Version erhöht wurde.
Lösung
- Registrieren Sie das aktuelle Release (Freigegebenes Paket installieren). Prüfen Sie im VBA-Editor (Extras > Verweise), dass WKL Forms Object Library mit der Version des registrierten Release aufgeführt ist; vorhandene Arbeitsmappen mit einem Verweis auf eine ältere Version wechseln von selbst darauf.
- Schließen Sie alle Office-Anwendungen und öffnen Sie die Datei erneut.
Muss die Zeile auf einem Rechner kompilieren, auf dem sich die Registrierung nicht aktualisieren lässt, greifen Sie über eine Variable vom eigenen Typ des Steuerelements darauf zu; der Code bleibt früh gebunden, mit IntelliSense:
Dim myList As WklTreeList Set myList = UserForm1.List1 myList.LinkChildFields = "OrderID"