如何在 RibbonX 中将 1000 多个项目添加到 ComboBox?

How to add more than 1000 items to a ComboBox in RibbonX?

提问人:eszenyid 提问时间:8/27/2023 更新时间:8/27/2023 访问量:77

问:

我在 Word 中制作了一个自定义功能区,它有一个 ComboBox。我想使用 VBA 宏用项目填充该 ComboBox。问题是似乎 ComboBox 只能容纳 1000 个项目。当我尝试放置超过 1000 个项目时,我只看到一个空的 ComboBox。

我怎样才能克服这个问题?

(我知道这可以通过用户表单来克服,但从功能区工作会更好。

这是我的 xml 代码:

<customUI 
    xmlns="http://schemas.microsoft.com/office/2006/01/customui"
    onLoad="Ribbon_Load">
    <ribbon >
        <tabs >
            <tab 
                id="Tab1"
                label="CustomTab">
                <group id="Group1" 
                label="CustomGroup" >
                    <comboBox
                        id="comboBox1"
                        label="Elements:"
                        sizeString="WWWWWWWWWWWWWWWWWWWWWWWW"
                        getItemID="getElementID"
                        getItemLabel="getElementLabel"
                        getItemCount="getElementCount"/>
                    
                </group>
                
            </tab >
        </tabs >
    </ribbon >
</customUI >

和我在 VBA 中的代码:

Dim myRibbon As IRibbonUI

Sub Ribbon_Load(ribbon As IRibbonUI)
    Set myRibbon = ribbon
    ribbon.ActivateTab "Tab1"
        
End Sub
Sub getElementID(control As IRibbonControl, index As Integer, ByRef id)

    id = "ID" & index
    
End Sub

Sub getElementLabel(control As IRibbonControl, index As Integer, ByRef label)

    label = "Element " & index
    
End Sub
Sub getElementCount(control As IRibbonControl, ByRef returnedVal)
    returnedVal = 1000
    
End Sub

如果返回的 Val 值为 1001 或更大,则 ComboBox 为空。

XML VBA MS-Word 组合框 功能区X

评论

1赞 Super Symmetry 8/27/2023
我认为 1000 是一个硬性限制。您可能希望将项目拆分为多个组合框。
1赞 Tom Brunberg 8/27/2023
这数千个项目代表什么?你有没有考虑过用户体验?
0赞 eszenyid 8/27/2023
这一千个项目是数据库中的名称。所有名称都不同,因此我们可以通过名称来识别项目。我插入了组合框,以便在您键入时获得名称建议。

答:

-1赞 kaylei sidharth 8/27/2023 #1

这是解决方案:

您遇到的限制是 RibbonX 中 ComboBox 的已知问题。要克服此限制,您可以实现虚拟化。不要将所有项目直接填充到 ComboBox 中,而是根据用户交互按需填充它们。当用户与 ComboBox 交互时,动态加载并显示该特定交互的项目。这样,您可以有效地解决 1000 项的限制。

为此,您需要修改 VBA 代码以处理 ComboBox 交互并根据需要动态填充项目。此方法允许您维护响应式用户界面,而不受 ComboBox 项目限制的约束。

评论

0赞 Super Symmetry 8/27/2023
好主意,但只有在用户知道他们在寻找什么时才有效。这“虚拟化”是怎么回事?(只是好奇)
0赞 eszenyid 8/27/2023
好主意,但是您如何按需填充它?我只知道onAction回调函数,但它并不能解决问题,因为它只有在用户完成输入时才会调用。是否可以在键入时以数字方式更改组合框?
0赞 John Korchok 8/28/2023
一个好的答案将包括VBA代码,以显示如何实现您的建议。
3赞 Tim Williams 8/28/2023
...“现在画出猫头鹰的其余部分”
1赞 Adrian Mole 8/29/2023
这个答案的风格看起来很像 ChatGPT;也适用于您的大多数/所有其他答案。请注意,不允许在 Stack Overflow 上发布 AI 生成的内容。