组合框更改事件正在触发工作表中的任何更改

Posted

技术标签:

【中文标题】组合框更改事件正在触发工作表中的任何更改【英文标题】:Combobox change event is firing for any changes in worksheet 【发布时间】:2021-12-29 16:06:44 【问题描述】:

我尝试在我的电子表格中添加 ComboBox,但它没有按我想要的方式工作。我遇到的问题是,在工作表中进行的任何更改都会触发组合框事件(下拉)。例如,我将组合框链接到单元格 A1,每当我更改 H9 单元格(或任何其他单元格)中的值时,都会触发组合框的下拉菜单。我只想在其链接单元格更改时触发组合框下拉框,即A1。

Private Sub ComboBox1_Change()
'DROP-DOWN USE CATEGORY BOX ///////////////////////////////////////////////////////
Dim Use As String
Dim Ind As String
Use = Worksheets("PEC Calculator").Range("B8").Value
Ind = Worksheets("PEC Calculator").Range("B3").Value
If ComboBox1.Value <> "" Then
ComboBox1.ListFillRange = "UC_List"
Me.ComboBox1.DropDown
End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False
Dim tblA As ListObject
Dim nRows As Long
Dim nCols As Long

Set tblA = Worksheets("PEC Calculator").ListObjects("ATableINPUT")

If tblA.Range(2, 2).Value = "TableA1" Then
    If Range("B4").Value = "Batch" Then
    tblA.Range(3, 2) = 0.000001
    Else
    tblA.Range(3, 2) = 0.000001
    End If
End if
Application.EnableEvents = True
End Sub

有没有办法解决这个问题?有什么想法吗?

【问题讨论】:

是的。你说的对。我忘了把线放在这里。我更新了代码 您没有照原样复制事件代码吗?您是否在问题中编写了他们的代码? 我在问题中复制了我的代码。 我无法复制该问题。工作表上是否发生了任何其他可能导致此行为的事件? 不,我刚刚定义了 Combobox 并链接到 A1。 'UC_list' 是一个动态列表。 【参考方案1】:

每次.Value 属性更改时都会触发ComboBox.Change 事件。您设置为A1.LinkedCell 属性会导致这些事件在每次工作表更改时触发,因为A1 包含一个公式。

Excel 中的某些公式要求在每次工作表更改时重新计算。 即使新值与旧值相同,仍会触发ComboBox.Change 事件。

要解决这个问题,我建议声明一个Module-Level 变量并使用它来保存组合框的值。模块级变量在执行之间保留其值。这样您就可以在每个事件期间比较旧值和新值,并且仅在值发生更改时执行您的操作。

Dim CB_Val As Variant
Private Sub ComboBox1_Change()
    If Me.ComboBox1.Value <> CB_Val Then
        CB_Val = Me.ComboBox1.Value
        'DROP-DOWN USE CATEGORY BOX ///////////////
        Dim Use As String
        Dim Ind As String
        Use = Worksheets("PEC Calculator").Range("B8").Value
        Ind = Worksheets("PEC Calculator").Range("B3").Value
        If ComboBox1.Value <> "" Then
            ComboBox1.ListFillRange = "UC_List"
            Me.ComboBox1.DropDown
        End If
    End If
End Sub

【讨论】:

太棒了!非常感谢!

以上是关于组合框更改事件正在触发工作表中的任何更改的主要内容,如果未能解决你的问题,请参考以下文章

ComboBox将工作表名称加载到下拉列表中

Flash/Actionscript2 - 无法触发组合框“更改”事件

由工作表更改事件触发的复制粘贴值不起作用

为 kendo ui Combobox 触发了两次更改事件

SelectedIndexChanged 触发重新计算工作表

删除多个单元格时不会发生 Excel 工作表更改事件