Excel ActiveX 组合框显示以前的值问题

Excel ActiveX ComboBox Displays Previous Value Issue

跨页上的嵌入式 ActiveX ComboBox 表单出现问题sheet 其中:

问题有没有办法以编程方式强制执行此事件(在显示新值之前恢复到旧值)?

我已经尝试在 ComboBox 的 Change 事件中使用以下内容,以及在 sheet 上由另一个形状调用的宏中:

进行了更多搜索,发现这个问题 Excel ActiveX Combobox shows previous selection when losing focus 有同样的问题

将从这里开始:

我创建了一个组合框,里面有各种水果作为项目。

我点击了梨。然后是菠萝。然后单击单元格 A1,触发失去焦点事件。

Private Sub ComboBox1_LostFocus()
    Debug.Print ComboBox1.Value
    Debug.Print ComboBox1.Value
    Debug.Print ComboBox1.Value
End Sub

这是我直接 window 中的文字: 菠萝 菠萝 菠萝

这让我认为这是一个渲染问题,而不是值更改,尽管它可能发生得太快以至于我的 debug.print 没有捕捉到它。

有趣的是,如果您从 VBA 内部进行调用,则不会发生闪光:

Sub Main()
    ComboBox1.Value = "mango"
    Range("A1").Select
End Sub

如果你只是 运行

    ComboBox1.Value = "mango"

然后单击工作表和select一个单元格

向 ComboBox 添加了一个 LostFocus 事件,该事件有一行选择了一个单元格。 This removed the "flicker" to the previous value when another cell on the sheet was selected, and also caused the ComboBox value to "flicker" back to the new value after "flickering" to the更改 ComboBox 的值后单击命令按钮时的旧值...

因此这解决了我的问题(主要是 - 无法阻止 "flicker" 通过命令按钮发生在 运行 另一个宏上,但至少该值不会停留在旧的另一个宏运行时的值)

想法来自这个线程:

我有一个解决方案,可以解决这个问题。

我在工作表中插入了一个 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