问题与电子表格上的嵌入式ActiveX ComboBox表单有关,其中:
但是,当在工作表上选择一个单元格/形状时,ComboBox值会先恢复到先前的值一秒钟,然后再返回到新值
问题是因为:如果在更改ComboBox值后按下了用于宏的按钮,则在宏运行时会显示旧的ComboBox值,而不是新值
问题:是否可以通过编程方式强制此事件(在显示新值之前恢复为旧值)?
我尝试在ComboBox的Change事件中以及在工作表上其他形状调用的宏中使用以下内容:
进行了更多搜索,发现与此问题相同的问题Excel ActiveX Combobox shows previous selection when losing focus
答案 0 :(得分:1)
将从这里开始:
我创建了一个comboBox,里面装有各种水果。
我点击了梨。然后是菠萝。然后单击单元格A1,触发焦点丢失事件。
Private Sub ComboBox1_LostFocus()
Debug.Print ComboBox1.Value
Debug.Print ComboBox1.Value
Debug.Print ComboBox1.Value
End Sub
这是我即时窗口中的文字: 菠萝 菠萝 菠萝
这使我认为这是一个渲染问题,而不是值更改,尽管可能发生的太快了,以至于我的debug.print无法捕获它。
有趣的是,如果您是从VBA内部进行呼叫,则不会发生闪烁:
Sub Main()
ComboBox1.Value = "mango"
Range("A1").Select
End Sub
如果您只运行
ComboBox1.Value = "mango"
然后单击工作表并选择一个单元格
答案 1 :(得分:1)
向ComboBox添加了LostFocus
事件,该事件具有选择单元格的一行。当选择工作表上的另一个单元格时,这将“闪烁”删除为先前的值,并且在更改后单击命令按钮后,将“闪烁”更改为旧值后,还导致ComboBox值“闪烁”回到新值组合框的值...
因此,这解决了我的问题(大多数情况下-无法阻止通过命令按钮运行另一个宏时发生“闪烁”,但至少在其他宏运行时该值不会停留在旧值上)< / p>
想法来自以下线程:What event is triggered when user selects value from drop down ComboBox (ActiveX)?
答案 2 :(得分:0)
我有一个可以解决的解决方案。
我在工作表(与ComboBox相同的位置)上插入了ActiveX标签,并将标签visible
的状态设置为False
。
每次关闭下拉框时,焦点都设置在不可见的标签上
首先是一个全局变量。
Public DropDownBegin As Boolean
然后是子例程
Private Sub ComboBox1_DropButtonClick()
DropDownBegin = Not DropDownBegin
If Not DropDownBegin Then
ActiveSheet.Shapes("Label1").OLEFormat.Object.TopLeftCell.Select
End If
End Sub