【问题标题】:Dynamic Combobox ListFillRange without VBA没有 VBA 的动态组合框 ListFillRange
【发布时间】:2020-07-13 10:25:29
【问题描述】:

我有一个 Excel 文档,我需要将它不使用 VBA 部署给我的同事。我想动态填充其中一张表中有一个组合框。组合框的内容是来自不同工作簿的数据查询结果,因此行数可能会有所不同。

我创建了一个临时子只是为了分配 ListFillRange。我已经添加了迄今为止我尝试过的所有不同尝试...

Sub SetListFillRange()
    ComboBox1.ListFillRange = "=MyQueryTable[SomeColumn]"
    ComboBox1.ListFillRange = "=TestName" 'A named Range pointing to MyQueryTable[SomeColumn]
    ComboBox1.ListFillRange = "=[TestName]"
    ComboBox1.ListFillRange = "='SheetX'!A2:INDEX('SheetX'!$A:$A,COUNTA('SheetX'!$A:$A))"
    ComboBox1.ListFillRange = "=OFFSET('SheetX'!A2,0,0,COUNTA('SheetX'!$A:$A) - 1,1)"
End Sub

我尝试使用 ActiveX ComboBox 的关键在于 Excel 随附的 ComboBox 表单中缺少的自动完成功能(实际上您可能根本不会在其中输入文本......)。

【问题讨论】:

    标签: excel dynamic combobox


    【解决方案1】:

    如果您使用的是普通 Excel 表格,则可以改用 List

    Sub SetListFillRange()
        ComboBox1.List = ActiveSheet.ListObjects("Table1").ListColumns("SomeColumn").DataBodyRange.Value
    End Sub
    

    如果你想使用 ListFillRange 你可以试试

    ComboBox1.ListFillRange = ActiveSheet.ListObjects("Table1").ListColumns("SomeColumn").DataBodyRange.Address
    

    【讨论】:

    • 感谢 List-property 的提示。但是您的两个建议都只从 QueryTable 创建硬拷贝,因此我的 ComboBox 根本不会发生动态变化。
    • 如何刷新查询?
    • 自动,每5分钟一次(在查询属性中设置),但实际数据不会经常变化...问题是,一旦部署文档,我将不再具有写入权限到存储它的路径,因为我只是在协助升级过程。因此,为 ComboBox 构建列表必须是一种“面向未来”的机制。
    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 2019-03-23
    相关资源
    最近更新 更多