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
Manually Remove CITRIX XenApp v11
Close Open File Handles on Remote Server
Set variable
kaspersky admin kit is not updating
Re-Sync Transactional Replication
How to show the progress of record submission to the database dynamically in JSP
drag and drop sortable list?
VB.Net 2010: ResourceManager.GetObject fails with silent exception on x64
Ways to merge files in linux
Strip off double quotes from string and replace with single quote