Excel ActiveX ComboBox显示先前的值问题

时间:2018-07-18 18:36:57

标签: excel vba user-interface combobox activex

问题与电子表格上的嵌入式ActiveX ComboBox表单有关,其中:

  • 更改组合框中的值后,值会正确更改
  • 但是,当在工作表上选择一个单元格/形状时,ComboBox值会先恢复到先前的值一秒钟,然后再返回到新值

  • 问题是因为:如果在更改ComboBox值后按下了用于宏的按钮,则在宏运行时会显示旧的ComboBox值,而不是新值

问题是否可以通过编程方式强制此事件(在显示新值之前恢复为旧值)?

我尝试在ComboBox的Change事件中以及在工作表上其他形状调用的宏中使用以下内容:

  • 计算工作表
  • 选择/激活单元格
  • ScreenUpdating = false,ScreenUpdating = true

进行了更多搜索,发现与此问题相同的问题Excel ActiveX Combobox shows previous selection when losing focus

3 个答案:

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