2

如何访问我的自定义功能区元素?

元素在 (.xlsm\customUI\customUI.xml)

<ribbon startFromScratch="false">
    <tabs>
        <tab idMso="TabHome">
            <group id="MatrixGroup" label="xxx" insertBeforeMso="GroupClipboard">
                <button id="b1" label="111" imageMso="DataFormSource" onAction="asas" />
                <button id="b2" label="222" imageMso="ConditionalFormattingClearMenu" onAction="sasa" />
                <dropDown id="Drop" label=" Env" sizeString="WWWWWWWWW">
                    <item id="Item1" label="1"/>
                    <item id="Item2" label="2"/>
                    <item id="Item3" label="3"/>            
                    <item id="Item4" label="4"/>
                </dropDown>
            </group>
        </tab>
    </tabs>
</ribbon>

当我点击按钮 id="b1" 时,我需要选择 dropDown 元素名称/id,因此 dropDown 元素的 onAction="myMacro" 在这里无济于事。

但无论如何,有一个代码来获取下拉元素 id - 也许你可以将它转换为从另一个 Sub 调用这个 sub(通过按下按钮 id="b1" 触发)

Sub GetS(control As IRibbonControl, id As String, index As Integer)
    If control.id = "Drop" Then
    MsgBox id
End If End Sub
4

1 回答 1

1

在这种情况下,您可能会使用几个回调:

  1. GetSelectedItemIndex:我认为这会从下拉控件返回所选项目的索引位置。
  2. GetItemLabel:从功能区下拉控件返回所选项目标签
  3. GetItemID: 返回指定Index项的 ID

每个人的签名是:

Sub GetSelectedItemIndex(control As IRibbonControl, ByRef returnedVal)

End Sub

Sub GetItemLabel(control As IRibbonControl, Index As Integer, ByRef returnedVal)

End Sub

Sub GetItemID(control As IRibbonControl, Index As Integer, ByRef id)

End Sub

您可以将control对象从一个回调传递给另一个(本质上是手动调用/触发这些回调过程),这是正确的。

我无法对此进行测试,因此我将根据记忆和猜测进行一些操作,您可能需要自行调整和调试,但希望这会有所帮助。如果我没记错的话,这需要工作的方式是在sasa调用回调时,您需要手动调用GetSelectedItemIndex然后GetItemLabel传递适当的control对象。

这是棘手的部分,在 dropDowncontrol对象上保留一个句柄。

实际上,Ribbon 对象存在一些困难,我发现通过最初将其加载到自定义类对象中更容易使用(保留对Dictionary属性中每个控件的直接对象引用,由控件名称/id 键控) 以便我可以从其他程序中随意传递它们)。这里有一些背景知识可能就足够了,就设置 Class 对象而言,您只需要添加另一个属性GetLet过程作为Dictionary类型,这样您就可以将每个功能区控件添加到 dict。如果您对该实施有疑问,请就此提出一个单独的问题,我会尽力提供帮助。

因此,一旦您可以访问适当的控件,您就可以将该对象传递给GetSelectedItemIndex例如:

Dim ctrl as IRibbonControl
Dim itm_id, itm_index 
Set ctrl = {some object reference to the dropDown control}

Call GetSelectedItemIndex(ctrl, itm_index)
Call GetItemId(ctrl, itm_index, itm_id)
MsgBox(itm_id)
于 2016-12-09T19:09:32.993 回答