Search code examples
vbacomatllate-binding

VBA CreateObject versus Type Library References


I have build a COM object via ATL, to use compiled C++ in VBA. My type library is (say) "MyObjLib", and the object is "MyObj".

If I use the Object Browser in VBA, all looks good: it shows me the Library as MyObjLib, and within that I see a class MyObj as a member of the library.

If, in VBA, I include this library through the References menu, I can write:

Dim obj as MyObj
Set obj = new MyObj

and it all works fine. However if I try:

Dim obj as Object
Set obj = CreateObject("MyObjLib.MyObj")

it fails with "Runtime Error 429: ActiveX component can't create object."

This is unfortunate as I now want to use the COM object from Python. Any ideas what I am missing?


Solution

  • Thanks for the comments. I spent some time searching my C++ code for the ProgId. Then I stumbled across another SO answer, about someone who had left the ProgId field blank in the ATL Simple COM object Wizard ... which is exactly what I had done! Hence I had never registered the ProgId for the class (and hence no entry in HKCR in the Registy).

    I created another project using the Wizard, this time entering a ProgID and copied the syntax from the .rgs file in the new project to my existing one.

    Hey presto, CreateObject() works fine now.