Das Argument Sie angeben, wenn CreateObject
Aufruf ist kein Namespace, Es handelt sich um eine ProgId
- eine Zeichenfolge, die COM verwendet, um registrierte Klassen (und die Bibliothek, in der sie definiert sind und wo sich diese Bibliothek befindet) in der Windows-Registrierung zu suchen.
Wenn es keinen registrierten COM-Typ mit einem ProgId
Wert von System.Management.Automation.Runspaces.RunspaceFactory
gibt, kann ActiveX dieses Objekt nicht erstellen.
Wenn es keine COM-Typbibliothek für einen Namespace gibt (d. H. Die Assembly ist nicht für COM-Interop registriert), versuchen Sie COM von .NET/verwaltetem Code verstehen zu lassen, was nicht möglich ist.
Was ich nicht verstehe ist, wie Excel/Word-legt fest, welche Klassen ausgesetzt sind und welche nicht
Excel/Word/was auch immer Host-Anwendung nichts damit zu tun hat, ist es VBA eigene Laufzeit, die die COM-Typen lädt, und es ist die Windows-Registrierung, die ProgId
für alles enthält, was registriert ist.
Wenn Sie Ihre Registrierung für Scripting.Dictionary
unter HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID
suchen, werden Sie schließlich einen Schlüssel finden {EE09B103-97E0-11CF-978F-00A02463E06F}
genannt, mit einem ProgID
Unterschlüssel einen Wert von Scripting.Dictionary
und einen InprocServer32
Unterschlüssel mit einem Wert von C:\Windows\system32\scrrun.dll
hat, und wenn die VBA-Laufzeit erfolgreich bei Wenn Sie eine Instanz des Typs mit der angegebenen Nummer ProgId
in dieser Typbibliothek erstellen, ist der Aufruf CreateObject
erfolgreich und gibt die Instanz zurück. Andernfalls wird der Fehler 429 ausgegeben und "ActiveX kann kein Objekt erstellen" angezeigt.
Einfach: Excel/Word wird nicht einmal entfernt beteiligt. Es ist die Aufgabe der VBE, nicht die der Host-Anwendung. –
Woher weiß VBE, was zugänglich ist und was nicht? – Konrads
Nur eine Teilmenge der .NET-Klassen ist [ComVisible (true)]. Meistens das, was in .NET 1.0 war, damals, als es noch wichtig war, Programmierer dazu zu bewegen, auf dem .NET-Zug aufzuspringen und sie nicht dazu zu zwingen, alles neu zu schreiben, was sie hatten. Sie müssen Ihren eigenen [ComVisible] -Wrapper erstellen. –