Microsoft
Software
Hardware
Network
Question : VBA ole object wrapping
Hi,
I'm trying to wrap a OLE object into a class (such as I can add my own events etc.)
Unfortunately, it seems to only work if the OLE Object is manually created.
If it is created in my class or even in the macro that use the object, it goes out of scope at the end of the macro and induces the termination of my wrapping object, even if my object is a global variable.
The following shows this point:
class module called Obj:
Private p_oleCtl As OLEObject
Property Set ActiveXControl(ByVal oleCtl As OLEObject)
Set p_oleCtl = oleCtl
End Property
Property Get ActiveXControl() As OLEObject
Set ActiveXControl = p_oleCtl
End Property
Private Sub Class_Terminate()
MsgBox "end"
End Sub
Regular module:
Dim GlobalObj As Obj
Sub CreateButton()
Call ActiveSheet.OLEObjects.Add
(ClassType
:="Forms.C
ommandButt
on.1")
End Sub
Sub Test()
Call CreateButton
Set GlobalObj = New Obj
Set GlobalObj.ActiveXControl = ActiveSheet.OLEObjects(1)
End Sub
when Test is run, the msgbox "end" is displaid.
It is not displaid if I run CreateButton first and then Test (without the call to CreateButton).
Strangely enough, The same issue occurs even if the wrapped OLE object is a global variable.
Any clue as to why this is like that and how to work around it?
Many Thanks
Answer : VBA ole object wrapping
By adding an activex object you effectively trigger a code reset (because they become part of the vbproject). If you really need to do this, I would suggest using an OnTime macro to assign the variable after you have created it.
Random Solutions
How do I restore my Exchange 2003 Virtual Directory Settings back to Default
Network Storage Device with USB Connection.
setup NAT on Cisco ASA
Weighted Java algorith for string comparison
Windows Update on ISA 2006 Server
HP-UNIX - compressing/zipping files that are 31GB
How to setup zywall 10w firewall gateway
Contents of "My documents" disappeared
Error:Operating system error code 3(The system cannot find the path specified.) doing BulkInser in a SQL Query
Insert into MySQL Table from MSSQL Insert Trigger