excel - ComboBox.MatchEntry 属性如何具有 `fmMatchEntryComplete` 值但能够覆盖自动完成功能?
问题描述
我的问题是我有一个列表框被植入到组合框中,ComboBox.List = MyArr
作为框中的列表数据。我希望它的工作方式与您在其他应用程序中看到的大多数用户表单类似,在组合框中键入将显示与用户输入相关的最佳匹配,但是当您按下键盘上的退格键时会删除自动完成功能。
当我尝试仅输入文本的缩短版本时会出现问题。例如,当预定义列表包含单词:“SUNNIES”,但我想输入“SUN”时。无论我做什么,组合框都会自动完成“SUNNIES”。但我也不想删除自动完成功能。
解决方案
我认为有一种解决方法可以使用该_KeyDown
事件实现您想要的行为。
您可以ComboBox1
使用以下方法更改您的行为:
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If Me.ComboBox1.SelLength > 0 And KeyCode = 8 Then
KeyCode = 46
End If
End Sub
它会查看是否有选定的文本,如果按下退格键,KeyCode = 8
则将其更改为 delete KeyCode = 46
。如果没有选择任何内容,它将像往常一样退格。
如果您想将此应用到您的用户窗体中的所有组合框......</h3>
... 执行以下操作而不是上述_KeyDown
事件。
添加一个类模块并
CmbClass
使用以下代码命名它:Option Explicit Public WithEvents ComboBoxGroup As MSForms.ComboBox Private Sub ComboBoxGroup_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If ComboBoxGroup.SelLength > 0 And KeyCode = 8 Then KeyCode = 46 End If End Sub
将以下代码添加到要应用该行为的每个用户窗体:
Option Explicit Dim ComboBoxes() As New cmbClass Private Sub UserForm_Initialize() Dim ComboBoxCount As Integer Dim ctl As Control ComboBoxCount = 0 For Each ctl In Me.Controls If TypeName(ctl) = "ComboBox" Then ComboBoxCount = ComboBoxCount + 1 ReDim Preserve ComboBoxes(1 To ComboBoxCount) Set ComboBoxes(ComboBoxCount).ComboBoxGroup = ctl End If Next ctl End Sub
推荐阅读
- postgresql - 不能从 db.QueryRow() 推断出错误
- python - 如何提取列名的两个特定字符并将它们附加到另一个列名?
- node.js - 无法在 Google Cloud Function 中加载 node_modules(index.js,不在项目根目录上)
- java - Java中的循环不可变链表
- javascript - 使用ajax将数据从php发送到图表
- javascript - 如何从 Google Analytics 跟踪器获取电子商务交易 ID
- linux - 排除 vcd2fst 分段错误时调试信息不正确
- node.js - MongoDB out collection(替换所有数据,不减少)配额超出
- php - SplFileInfo::getSize(): 统计失败
- windows - 当我想使用函数 attachFileToField 将文件上传到字段中时,如何修复“意外令牌”?贝哈特水貂