繁体   English   中英

Excel ActiveX ComboBox 显示上一个值问题

[英]Excel ActiveX ComboBox Displays Previous Value Issue

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

  • 更改 ComboBox 中的值后,值会正确更改
  • 但是,当在工作表上选择一个单元格/形状时,ComboBox 值会在一瞬间恢复为以前的值,然后再恢复到新值

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

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

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

  • 计算工作表
  • 选择/激活单元格
  • 屏幕更新 = 假,屏幕更新 = 真

进行了更多搜索并发现了这个问题Excel ActiveX 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"

然后单击工作表并选择一个单元格

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 old value when a command button was clicked after changing ComboBox 的值...

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

想法来自这个线程: 当用户从下拉组合框(ActiveX)中选择值时会触发什么事件?

我有一个可以解决的解决方案。

我将 ActiveX 标签插入到工作表(与 ComboBox 位于同一位置)并将标签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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM