【问题标题】:Excel crash when trying to Autocomplete an ActiveX ComboBox尝试自动完成 ActiveX 组合框时 Excel 崩溃
【发布时间】:2017-02-10 14:57:20
【问题描述】:

我在工作表上有一个 ActiveX Combobox 控件,这是 _Change 事件代码

Private Sub ComboBox1_Change()
  Me.ComboBox1.ListFillRange = "ItemSearch"
  Me.ComboBox1.DropDown
End Sub

当我使用键盘上/下键在列表中移动时,它会自动退出 Excel。

有人知道这个问题的解决方法吗?我基本上想要一个动态组合框。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    当您更改所选选项时,您会强制 Combobox 的可能值更新,
    这就是它崩溃的原因。

    您可以尝试在该事件中保留Me.ComboBox1.DropDown

    .ListFillRange 应该在另一个事件中:

    • Workbook_Open
    • Workbook_SheetChange
    • Worksheet_SelectionChange
    • Worksheet_Change

    如果您尝试实现一种自动完成行为,您可以使用内置属性

    1. 右键单击控件,单击属性
    2. 在打开的“属性”窗口中,找到MatchEntry 属性
    3. 设置为0 - fmMatchEntryFirstLetter

    【讨论】:

    • 但是它不允许组合框是动态的。
    • @newguy :动态是什么意思?
    • 意思是我想根据我输入的内容过滤组合框的值。
    • @newguy :好吧,您正在尝试使用一种自动完成功能!并试图重新发明轮子! ;) 将组合框的MatchEntry property 设置为零fmMatchEntryFirstLetter,如果还不够,这里有详细的解决方案:extendoffice.com/documents/excel/…
    • @R3uK 非常感谢。我遇到了同样的问题并且很生气。向你致敬。????
    【解决方案2】:

    我已经通过设置 ListFillRange 解决了这个问题,只有在没有选择任何项目时,即

     If Me.TempCombo.ListIndex = -1 Then
        Me.TempCombo.ListFillRange =...          
     End If
    

    这解决了错误并且是可取的,因为(至少在我的情况下)范围在选择某些内容时只能有 1 个项目。因此,用户键入自动完成,但当他开始使用箭头时,他可以从过滤的到目前为止的值中进行选择。

    完整示例可在there 获得。与this often mentioned example 不同,当用户键入时,它会过滤掉与当前输入不匹配的条目

    【讨论】:

      猜你喜欢
      • 2018-09-12
      • 2020-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      相关资源
      最近更新 更多