【问题标题】:Populate a combobox in DropButtonClick在 DropButtonClick 中填充组合框
【发布时间】:2012-08-22 02:00:18
【问题描述】:

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

Private Sub cmbAdvisor_DropButtonClick()
    cmbAdvisor.Clear

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

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

【问题讨论】:

    标签: excel vba


    【解决方案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
    

    行动中

    【讨论】:

      【解决方案2】:

      对于嵌入工作表的 ActiveX 控件:

      activeX 组合框处理项目选择时的点击事件,就好像它是实际的 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 用户窗体上的 VBA 组合框,您可能希望改用 Enter

      Private Sub cmbAdvisor_Enter()
          cmbAdvisor.Clear
          cmbAdvisor.AddItem ("Test1")
          cmbAdvisor.AddItem ("Test2")
      End Sub
      

      【讨论】:

      • 回车似乎不是VB编辑器下拉列表中有效函数的选择(反正我试过了,确实没有触发)。我查看了 Click 函数,但它似乎直到我单击组合框中的一项(不是在最初的“下拉”单击期间)才被触发。
      • 我在 Excel 2010 中。我确实看到了 DropButtonClick,但下一项是错误。
      • 我不知道该告诉你什么...... :)。我在工作表中添加了一个 ActiveX 组合框,然后在 VB 编辑器中,可用函数列表如我所说。这与您使用的程序相同吗?
      • @DavidDoria 你试过 GotFocus 吗?当我在工作表上嵌入一个 activex 组合框时,这对我有用。
      • GotFocus 会产生更奇怪的结果。当我单击组合框时,有时列表会正常显示。其他时候列表显示为只有一行带有小的滚动按钮(更像是一个列表框而不是组合框)。其他时候会有更糟糕/奇怪的渲染伪影(比如盒子有点绘制但不完全)。我猜这又是由于函数开头的 .Clear 调用造成的?
      猜你喜欢
      • 1970-01-01
      • 2013-06-22
      • 2011-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多