我正在尝试通过在DropButtonClick函数中执行填充来填充组合框。举个简单的例子:
Private Sub cmbAdvisor_DropButtonClick()
cmbAdvisor.Clear
cmbAdvisor.AddItem ("Test1")
cmbAdvisor.AddItem ("Test2")
End Sub
这很好用,值显示在下拉列表中。但是,当我单击其中一个时,下拉列表消失,组合框现在不显示/空白。我希望它能显示我选择的项目。我猜这个问题是我在这个函数里面做了一个Clear - 但是我还能怎么做呢?
答案 0 :(得分:1)
我建议不要使用DropButtonClick
事件。这是一种替代方法( WAY 1 ),但是如果您仍然想使用DropButtonClick
,请参见 WAY 2
方法1
您可以在UserForm_Initialize()
或按钮单击事件中填充组合框。例如
Private Sub UserForm_Initialize()
cmbAdvisor.AddItem ("Test1")
cmbAdvisor.AddItem ("Test2")
End Sub
或
Private Sub CommandButton1_Click()
cmbAdvisor.Clear
cmbAdvisor.AddItem ("Test1")
cmbAdvisor.AddItem ("Test2")
End Sub
方法2
如果您仍要填充DropButtonClick
中的组合框,请使用此
Private Sub cmbAdvisor_DropButtonClick()
Dim prevPos As Long
'~~> Get the position of current selection
prevPos = cmbAdvisor.ListIndex
'~~> Switch off event so that when we select an
'~~> item, it doesn't run this proc again
Application.EnableEvents = False
cmbAdvisor.Clear
cmbAdvisor.AddItem ("Test1")
cmbAdvisor.AddItem ("Test2")
'~~> Set the selected value
cmbAdvisor.ListIndex = prevPos
'~~> Reset events
Application.EnableEvents = True
End Sub
实际操作
答案 1 :(得分:0)
对于工作表中嵌入的ActiveX控件:
activeX组合框处理项目选择上的click事件,就像它是一个实际的dropbuttonclick一样 - 这意味着我们需要一个状态对象。
Dim dropbuttonclicked As Boolean
Private Sub ComboBox1_DropButtonClick()
dropbuttonclicked = Not dropbuttonclicked
If dropbuttonclicked = True Then
ComboBox1.Clear
ComboBox1.AddItem ("Test1")
ComboBox1.AddItem ("Test2")
End If
End Sub
对于VBA UserForm上的VBA ComboBox,您可能希望改为使用Enter
:
Private Sub cmbAdvisor_Enter()
cmbAdvisor.Clear
cmbAdvisor.AddItem ("Test1")
cmbAdvisor.AddItem ("Test2")
End Sub