Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在工作表(非表单)中使用时,调整VBA中的ActiveX控件re Szing和Zorder_Vba_Excel - Fatal编程技术网

在工作表(非表单)中使用时,调整VBA中的ActiveX控件re Szing和Zorder

在工作表(非表单)中使用时,调整VBA中的ActiveX控件re Szing和Zorder,vba,excel,Vba,Excel,我进行了广泛的搜索,没有找到ActiveX控件/OLE对象的完整规范,我对它们是否相同以及如何在VBA中引用它们感到困惑。 我在MSDN中看到的材料非常浅薄和模糊,我通常的备忘单在这个咳嗽芯片上没有提及皮尔逊咳嗽 我在一个名为cChart的类模块中有以下代码: Option Explicit Public WithEvents ch As Chart Private Sub ch_MouseMove(ByVal Button As Long, ByVal Shift As Long, ByVa

我进行了广泛的搜索,没有找到ActiveX控件/OLE对象的完整规范,我对它们是否相同以及如何在VBA中引用它们感到困惑。 我在MSDN中看到的材料非常浅薄和模糊,我通常的备忘单在这个咳嗽芯片上没有提及皮尔逊咳嗽

我在一个名为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
这只是测试代码,我在(手动)运行initChart之前手动选择图表,然后手动运行inittb

我想摆脱这条线

ws.Shapes("TextBox1").ZOrder msoSendToBack
但在Form.TextBox对象中看不到名称或索引属性,因此无法执行以下操作:

ws.Shapes(tb.Name).ZOrder msoSendToBack
我是否需要将Form.TextBox对象重新转换为形状,以定位和调整其大小,并执行其他有用的操作,如控制其Z顺序和可见性

我可以不使用Form.XXXX对象来获取名称或索引吗?我真的需要将这些硬编码到shape对象中吗


如果可能的话,有人能告诉我这些对象规范的大致方向吗?

似乎没有一种明显的方法可以从TextBox对象返回到其主体形状。您可以在
cTextBox
Public shp As Shape
)中添加一个新字段来保存对宿主形状对象的引用:似乎不必要,但它至少提供了一个“干净”的解决方法。@TimWilliams是的,谢谢。我会照你说的做。我认为你评论中的关键词是“主持人形象”。。。比我最初的“流浪文本框”方法要好得多。