如何在Excel自定义功能区控件的下拉控件中设置默认值

2024-06-22

我为 Excel 2010 创建了一个自定义 Fluent Ribbon 界面,其中包含一个下拉菜单。相关XML代码(简化):

<dropDown id="chooseFilter" showLabel="true" label="Filter" onAction="filterSelected" > 
    <item id="Filter1" label="Filter 1" /> 
    <item id="Filter2" label="Filter 2" /> 
</dropDown>

加载功能区时,未选择任何值 - 下拉列表看起来为空。

我希望默认选择第一项 - 但找不到任何描述如何执行此操作的文档。我看了看MSDN 文档 http://msdn.microsoft.com/en-us/library/dd924079(v=office.12).aspx用于控制,但它没有涵盖这种情况。我尝试了“类似 HTML”语句的各种排列,但它们都被自定义 UI 编辑器拒绝为无效。我尝试过的事情的例子:

<item id="Filter1" label="Filter 1" selected="selected" /> 

错误信息:The 'selected' attribute is not declared

我尝试了其他属性,例如selectedItem, value, and selected in the <dropDown .../>声明,但似乎没有任何作用。

如果我有正确的文档,这将是微不足道的,但即使是功能区自定义的完整 Microsoft“文档”(发现对这个问题保持沉默。

我什至尝试查看架构是否位于http://schemas.microsoft.com/office/2006/01/customui http://schemas.microsoft.com/office/2006/01/customui可能是“人类可读的”,但是当我尝试在浏览器中打开它时,我被告知它不可用。也许有一个技巧...

所以我转向这个论坛的综合智慧。你可以从我的 Q/A 比率看出我不经常这样做......

如何修改 XML,以便打开功能区时在下拉控件中选择任意项目?我会选择将其作为第一项 - 但“我选择在 XML 中声明的任何项目”会更可取。

我正在为此寻找 XML 解决方案 - 宁愿不必添加onLoadVBA 代码或其他 VBA 技巧。这能有多难,对吧?...


看起来您需要使用 VBA 才能选择默认项目。

引用自dropDown 元素的文档 http://msdn.microsoft.com/en-us/library/dd947478%28v=office.12%29.aspx(我的重点):

getSelectedItemID(getSelectedItemID回调)

指定要调用的回调函数的名称,以确定要在此控件中选择的项目的标识符。 getSelectedItemID 和 getSelectedItemIndex 属性是互斥的。如果两个属性均未指定,则控件不应显示选定的项目。例如,考虑以下 XML 片段:

<gallery id="gallery" getItemCount="GetGalleryItemCount"  
   getItemID="GetItemID"
   getSelectedItemID="GetGallerySelectedItemID" />

在此示例中,当应用程序需要确定图库中的选定项目时,将调用 GetGallerySelectedItemID 回调函数。在此示例中,回调函数返回 GetItemID 回调函数返回的标识符之一。该属性的可能值由 ST_Delegate 简单类型定义,如第 2.3.2 节中所述。

根据我对文档的阅读,您应该自己维护过滤器的当前所选项目。 GetSelectedItemID 处理程序将返回当前选定的项目,OnAction 处理程序将更新它。

在 XML 中:

<dropDown id="chooseFilter" showLabel="true" label="Filter"
   getSelectedItemID="GetSelectedItemID" onAction="OnAction"> 
   <item id="Filter1" label="Filter 1" /> 
   <item id="Filter2" label="Filter 2" />
</dropDown>

在工作簿的代码模块中:

Private mCurrentItemID As Variant

Sub GetSelectedItemID(control As IRibbonControl, ByRef itemID As Variant)
    If IsEmpty(mCurrentItemID) Then
        mCurrentItemID = "Filter1"
    End If
    itemID = mCurrentItemID
End Sub

Sub OnAction(control As IRibbonControl, selectedID As String, _
             selectedIndex As Integer)
    mCurrentItemID = selectedID
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Excel自定义功能区控件的下拉控件中设置默认值 的相关文章

随机推荐