在DropButtonClick中填充组合框

时间:2012-08-22 02:00:19

标签: excel excel-vba vba

我正在尝试通过在DropButtonClick函数中执行填充来填充组合框。举个简单的例子:

Private Sub cmbAdvisor_DropButtonClick()
    cmbAdvisor.Clear

    cmbAdvisor.AddItem ("Test1")
    cmbAdvisor.AddItem ("Test2")
End Sub

这很好用,值显示在下拉列表中。但是,当我单击其中一个时,下拉列表消失,组合框现在不显示/空白。我希望它能显示我选择的项目。我猜这个问题是我在这个函数里面做了一个Clear - 但是我还能怎么做呢?

2 个答案:

答案 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

实际操作

enter image description here

答案 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