如何解决Combobox设置MatchRequired为True后点击退出报错的问题?
解决方案
- 先将Combobox的
MatchRequired属性修改为False,保留原有的MatchEntry 1-fmMatchEntryComplete、Style 0-fmStyleDropDownCombo属性配置不变 - 通过ComboBox的
Exit事件实现自定义校验逻辑,完全替代原MatchRequired属性的管控效果,同时避免系统默认的强制报错
实现代码
将以下代码写入对应窗体的代码模块即可(示例中组合框名称为ComboBox1,可根据实际名称修改):
Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) Dim i As Long Dim matchFlag As Boolean ' 若允许空值,空输入直接放行,不需要匹配校验 If Trim(ComboBox1.Text) = "" Then Exit Sub End If ' 遍历候选列表匹配输入内容,不区分大小写匹配 matchFlag = False For i = 0 To ComboBox1.ListCount - 1 If StrComp(Trim(ComboBox1.Text), ComboBox1.List(i), vbTextCompare) = 0 Then matchFlag = True Exit For End If Next i ' 未匹配到有效值时的处理逻辑 If Not matchFlag Then ' 方案1:无感知自动清空错误输入,用户可直接重新操作,无弹窗打断 ComboBox1.Text = "" ' 方案2:需要强制输入有效值时,取消下方两行注释,注释上面的清空语句 ' MsgBox "请输入下拉列表中存在的有效值", vbExclamation ' Cancel = True End If End Sub
适配说明
- 1000条候选项的遍历校验耗时可忽略,不会出现操作卡顿
- 两种处理逻辑可根据业务需求二选一,都不会触发系统默认的「Invalid Property Value」报错
内容的提问来源于stack exchange,提问作者kyle
相关产品推荐
相关产品推荐

