I have created an ActiveX control using C++. I use Visual Basic code to instance the control in an Excel worksheet. I can only run the VB script once, subsequent runs cause the following runtime error when attempting to access the ‘ActiveSheet’ variable:
Microsoft Visual Basic Run-time error '-2147319765 (8002802b)': Automation error Element not found
I am trying to work out what causes this error and how I can fix it?
As an experiment I tried creating a simple ActiveX control generated by Visual Studio wizards (in both VS 2005 & 2008). I didn’t add or modify any code in this test case. The simple test case still causes this error.
Other ActiveX controls in the system don’t cause this error (eg I tried instancing ‘Bitmap Image’) from VB code.
This is the VB code (a macro that I recorded, but hand-coded VB has the same issue):
Sub Macro1() ActiveSheet.OLEObjects.Add(ClassType:='test.test_control.1' _ , Link:=False, DisplayAsIcon:=False).Select End Sub
Can anyone give me an answer on this? Alternatively any pointers to resources that may help will be appreciated.
Thanks
After talking to Microsoft I found out the cause of the problem I was having.
When creating an ActiveX control using the VS 2005/2008 wizard you need to check the ‘Connection points’ check box in the ‘Options’ page. This adds, among other things, IConnectionPointContainerImpl as a base class for your ATL class, which in turn implements IConnectionPointContainer.
Failure to do this means that you can’t insert your ActiveX control into an Excel document via Visual Basic more than once. The second time you execute the script you start getting the ‘automation errors’.
The answer to the problem was simple enough and it worked, although I am still not sure how it actually relates to the ‘automation error’ and leaves me wondering why the error messages are not more informative.