【问题标题】:How to make Dynamic menu to perform multi selection on ribbon如何制作动态菜单以在功能区上执行多选
【发布时间】:2016-04-16 10:53:13
【问题描述】:

下面的代码创建带有复选框的动态菜单。每次用户必须选择菜单来选择一个项目。我想避免这种情况,只在 nenu 上单击一次。

这里是xml

<dynamicMenu id="MnuSelectOtherDB"
             label="Select Other Databases"
             getContent="GetContentCallback"/>

这里是 VBA 代码

Sub GetContentCallback(control As IRibbonControl, _
                       ByRef XMLString)
    ' Callback get the selected datbases

    Dim lngDummy    As Long
    Dim strDummy    As String
    Dim strContent  As String
    strDummy = "<menu xmlns=""http://schemas.microsoft"
    strDummy = strDummy & ".com/office/2006/01/customui"">"

        For lngDummy = 0 To 5
            strContent = strContent & _
            "<checkBox id=""MyDynaCheckbox" & lngDummy & _
            """ label =""Dynamic Item" & _
            lngDummy & """/>"
        Next

    strDummy = strDummy & strContent & " </menu>"
    XMLString = strDummy
End Sub

这里是屏幕截图

这里是问题的视频 Dynamic menu on ribbon

【问题讨论】:

  • 查看屏幕截图以了解您是否指的是功能区选项卡以及复选框双击的呈现方式会有所帮助。
  • 很遗憾,功能区的设计不支持您想做的事情。菜单是单选的,通常只是一个执行的命令。
  • 所以唯一的解决方案就是创建一个表单。

标签: vba ms-access-2010 ribbon-control


【解决方案1】:

根据 Cindy 的说法,功能区控件不允许这样做。暂时不可能!

【讨论】:

    【解决方案2】:

    您可以尝试使用 Sendkey 重新展开菜单

        ' for my case ALT + Y2 then Y4 is shortcut key to activate element of CustomUI element
        Application.SendKeys ("%Y2Y4")
    

    【讨论】:

    • 它可以工作......但是重新加载动态菜单会导致闪烁(折叠>重新展开)......
    【解决方案3】:

    “试试这个

    Public GLOBAL_VARIBLE as LONG 
    Public GobjRibbon as iribbonUI
    
    
    Sub GetContentCallback(control As IRibbonControl, _
                           ByRef XMLString)
        ' Callback get the selected datbases
    
        Dim lngDummy    As Long
        Dim strDummy    As String
        Dim strContent  As String
        strDummy = "<menu xmlns=""http://schemas.microsoft"
        strDummy = strDummy & ".com/office/2006/01/customui"">"
    
            For lngDummy = 0 To 5
                strContent = strContent & _
                "<checkBox id=""MyDynaCheckbox" & lngDummy & _
                """ label =""Dynamic Item" & _
                lngDummy & "" onAction=""FUNCTION_TO_SET_GLOBAL"" getPressed=""YOUR_FUNCTION_NAME"""/>"
            Next
    
        strDummy = strDummy & strContent & " </menu>"
        XMLString = strDummy
    End Sub
    
    
    
    Public Function FUNCTION_TO_SET_GLOBAL(ctl as IRibbonControl)
    GLOBAL_VARIBLE  = clng(mid(ctl.id,13))
    GobjRibbon.invalidate
    end function
    
    
    
    Public Function YOUR_FUNCTION_NAME(ctl as IRibbonControl, ByRef Checked)
     Checked = (ctl.id = "Dynamic Item" & GLOBAL_VARIBLE)
    end function
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-12
      • 2010-12-07
      • 1970-01-01
      • 2020-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多