首页 > 解决方案 > Excel VBA ComboBox DropButtonClick() 事件触发两次

问题描述

我有一个精心设计的仪表板,它使用了多个用户表单和每个用户表单中的许多控件。我遇到的具体问题涉及ComboBox_DropButtonClick()似乎正在触发两次的事件。组合框目前有两个事件,一个是DropButtonClick()我通过数组填充组合框列表的事件,另一个是一个ComboBox_Change()事件。我发现并试图阻止的是,当我单击下拉按钮时,DropButtonClick()事件会按预期触发。当列表出现在用户窗体上时,我进行了选择。在我单击其中一项后,该ComboBox_Change()事件将触发 - 也如预期的那样。但是,当ComboBox_Change()事件结束时,ComboBox_DropButtonClick()事件会触发一次额外的时间,大概是在它关闭时?我宁愿第二个DropButtonClick()不触发,因为它会额外运行该代码。

我没有提供详细的仪表板代码并确认我的发现,而是创建了第二个全新的工作簿来演示该问题。我创建了一个带有单个组合框的用户表单。我创建了相同的两个事件:DropButtonClick()Change(). 然后我编写了一段类似的代码来从数组中填充组合框列表,然后将组合框值打印到空白工作表上的任意单元格中。我在事件中使用了一个断点DropButtonClick()来帮助逐步完成序列并确认事件正在触发,如上所述。

Private Sub ComboBox1_Change()

Thisworkbook.worksheets(1).Range("A5") = Me.ComboBox1.Value

end sub

Private Sub ComboBox1_DropButtonClick()  
dim arr as variant  
dim I as integer  

for I = 0 to 5  
    if IsEmpty(arr) then  
        redim arr(0)  
    else  
        redim preserve arr(ubound(arr)+1)  
    end if  
    arr(ubound(arr)) = "A" & I  
next I  

Me.ComboBox1.List = arr  

end sub  

我希望该DropButtonClick()事件会触发,这将向我显示可供选择的元素数组。然后,我从选项中进行选择,该选项应该触发Change()事件并打印到工作表。查看。这一切都会发生。然后由于某种原因,在那之后,DropButtonClick()事件在所有执行完成之前再触发一次。试图理解为什么DropButtonClick()事件会发生两次,以及我如何避免第二次事件而不必嵌入一个公共布尔变量,如果true(例如)立即退出

标签: excelvbacomboboxuserform

解决方案


推荐阅读