Excel ActiveX Combo Box选中后输入框不显示内容问题求助
问题根源
- 你用
DropButtonClick事件触发列表更新的逻辑存在冲突:该事件不仅会在你点击下拉按钮展开列表时触发,还会在你选中下拉项、列表收起时二次触发。二次触发时代码会先清空整个Combo Box列表,你刚选中的值就被清掉了,自然无法在输入框中显示。 - 你把逻辑改到
TransferList_Change事件后筛选失效,是因为该事件仅会在Combo Box自身的选中值变更时触发,你操作复选框不会触发这个事件,列表自然不会跟随复选框状态更新。
修复方案
拆分逻辑,把列表更新的功能和触发逻辑分开即可解决:
- 首先删除原有
TransferList_DropButtonClick事件的全部代码,在当前工作表的代码模块中新增一个公共的列表更新子过程:
Sub 更新部门工作表列表() Application.EnableEvents = False Dim ws As Worksheet ' 保存原有选中值,更新后如果还在列表中就保留选中状态 Dim oldSelected As String oldSelected = TransferList.Value ' 清空现有列表后按复选框状态重新生成 TransferList.Clear For Each ws In ThisWorkbook.Sheets ' 这里可根据需要扩展多个复选框的判断逻辑 If ActiveSheet.Shapes("CheckBox_Viva").ControlFormat.Value = 1 Then TransferList.AddItem ws.Name End If Next ws ' 恢复原有选中值(如果存在于新列表中) If oldSelected <> "" Then Dim i As Integer For i = 0 To TransferList.ListCount - 1 If TransferList.List(i) = oldSelected Then TransferList.Value = oldSelected Exit For End If Next i End If Application.EnableEvents = True End Sub
- 给所有表单控件复选框绑定上述宏:右键点击复选框→选择「指定宏」→选中
更新部门工作表列表→确定,所有复选框都重复这个操作即可。
调整后操作复选框会自动刷新下拉列表,选中Combo Box的选项时不会触发列表清空逻辑,选中内容就能正常显示了。
内容的提问来源于stack exchange,提问作者Geo Koro
相关产品推荐
相关产品推荐

