调整ActiveX控件重新Szing和Zorder在VBA中使用时(不在窗体中)

我已经search了很多,无法find一个完整的ActiveX控件/ OLE对象的规范,我很困惑,如果他们是否是相同的事情,以及如何引用他们在VBA。 我在MSDN上看到的材料非常清淡,而且我通常的作弊表单在咳嗽 Chip Pearson 咳嗽时没有声音

我有一个名为cChart的类模块中的代码:

Option Explicit Public WithEvents ch As Chart Private Sub ch_MouseMove(ByVal Button As Long, ByVal Shift As Long, ByVal X As Long, _ ByVal Y As Long) Debug.Print X & Chr(9) & Y End Sub 

我有一个名为cTextBox的类模块中的代码:

 Option Explicit Public WithEvents tb As msforms.TextBox Public cht As Chart Dim ws As Worksheet Private Sub Class_Initialize() Set ws = ActiveSheet End Sub Private Sub tb_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, _ ByVal X As Single, ByVal Y As Single) cht.Parent.Activate ' I want to do this but I cant... tb.ZOrder msoSendToBack ' And I'm forced to do this ws.Shapes("TextBox1").ZOrder msoSendToBack End Sub Public Sub alignObjects() On Error GoTo objectsNotSet tb.Top = cht.Top 'at least, I would like to be able to do this line... objectsNotSet: Debug.Print timeStamp(Caller:=cModuleName, Context:=cMyName, message:="ERROR") End Sub 

这在一个标准模块中:

 Option Explicit Public chrt As cChart Public txtB As cTextBox Sub initChart() Set chrt = New cChart Set chrt.ch = ActiveChart End Sub Sub inittb() Set txtB = New cTextBox Set txtB.tb = ActiveSheet.OLEObjects("TextBox1").Object Set txtB.cht = chrt.ch End Sub 

它只是testing代码,我手动select图表之前(手动)运行initChart,然后我手动运行inittb。

我想摆脱这一行

 ws.Shapes("TextBox1").ZOrder msoSendToBack 

但没有名称或索引属性,我可以在Form.TextBox对象中看到允许我这样做:

 ws.Shapes(tb.Name).ZOrder msoSendToBack 

我是否需要重新塑造Form.TextBox对象作为一个形状来定位和调整它的大小,并做其他有用的事情,如控制它的Z顺序和可见性?

我可以不使用Form.XXXX对象来获取名称或索引? 我真的必须将这些代码硬编码到Shape对象吗?

如果可能的话,有人可以指向我在这些对象的规范的大方向?