【问题标题】:Error When Adding Near 1000 Comboboxes添加近 1000 个组合框时出错
【发布时间】:2013-01-05 02:26:36
【问题描述】:

我在数据采集领域工作,我们的客户需要一种方法来轻松设置多达 256 个输入通道的多个设置。每个通道需要 4 个组合框以表示所有可配置选项。 Here is a link to what it looks like.

这些组合框是在运行时使用以下方法循环创建的:

Set obj = Worksheets("Synergy Setup").OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, _
    DisplayAsIcon:=False, Left:=ttl_width + cell_width, Top:=ttl_height, Width:=cell_width2, Height:=cell_height)

大约 243 个通道(或接近 1000 个组合框)一切正常,然后我收到以下错误:

“自动化错误,未找到元素,错误 -2147319765”

使用 MsgBoxes 我已经确认确实是上述代码行导致了此错误,并且仅在我接近 1000 个组合框时才会发生。 此外,发生此错误后,我的 excel 文件中的所有内容都已损坏,并且我不断收到错误消息“对象库无效或包含对无法找到的对象定义的引用”。(编辑:不相关)

重申一下,这只发生在大量组合框的情况下。有什么想法吗?

编辑:我想跟进并说,对单元内组合框的更改不仅解决了我的问题,而且加快了我的设计 10 倍,令我惊讶的是,大大简化了代码也!谢谢!

【问题讨论】:

    标签: excel vba combobox


    【解决方案1】:

    也许您可以考虑使用在单元格下拉列表中代替组合框。
    Like e.g. described here。我认为它也会显示出更好的性能。

    编辑: 我用宏记录器捕获了一段代码(我只去掉了select):

    With Range("B:B").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=values_colors"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
    

    你仍然可以捕捉到值的变化,看看Worksheet_Change Event

    【讨论】:

    • 我想也许你是对的。是否可以以编程方式创建单元内下拉列表并在运行时设置它们的“ListFillRange”和“名称”?编辑:我还需要能够捕获“更改时”事件,以便防止用户在给定频道上创建非法设置组合。
    • +1 更好的主意:要添加选择约束,请考虑结合使用Dynamic Named RangesValidation - 开始查看 Contextures.com here and here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    相关资源
    最近更新 更多