首页 > 解决方案 > 列表框表单控件选择触发器 Worksheet SelectionChange

问题描述

我正在尝试使用此参考在工作表中进行的每次更改时跟踪更改(显示在图表中)(代码复制如下作为示例参考)。

工作表中的更改实际上可以由几个列表框(表单控制菜单)和其他单元格(例如输入 3 和 4)进行。假设由任何更改引起的结果值出现在单元格中G14,并且作为示例代码我想保留它们在I14(如示例图像中)。 在此处输入图像描述 例如,公式可能是链接到列表框的D14 + E14 + K14 + L14位置K14和值。L14输入 3 和 4 中的选择会触发Worksheet_Change,但列表框中的选择显然不会,我应该为列表框回调添加一个宏Worksheet_Change吗?

除此之外,如果有更好的保存结果的方法,请提出。
提前谢谢了!

Dim xVal As String

Private Sub Worksheet_Change(ByVal Target As Range)
    Static xCount As Integer

    Application.EnableEvents = False
    If Target.Address = Range("G14").Address Then
        Range("I14").Offset(xCount, 0).Value = xVal
        xCount = xCount + 1
    Else
        If xVal <> Range("G14").Value Then
         Range("I14").Offset(xCount, 0).Value = xVal
        xCount = xCount + 1
        End If
    End If
    Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    xVal = Range("G14").Value
End Sub

标签: excelvba

解决方案


当您询问触发事件以在选择列表框值(表单控件)时运行宏时,我相信这可以被视为答案。我相信有更好知识的人会改进它。

Worksheet_Change 事件在手动更改单元格或单元格范围时发生(不是通过任何自动过程,如计算或选择列表框值)

可以有不同的场景

First

受列表框更改影响的单元格的计算之间没有联系。比如说,在第一个列表框中,您选择 10,单元格 A2 更新为 10,单元格 A3 的计算值更改为 30。然后您在第二个列表框中选择 15,单元格 B2 更改为 15,如果 A2 和单元格 B3 独立计算A3 到 90。在这种情况下,这些是独立的列表框及其结果。因此,在这种情况下,您可以将宏分配给每个列表框,每次更改每个列表框中的值时都会运行该宏。

Second

相关计算:假设跟踪所需的结果在 D3 中,仅在选择 A2、B2、C2 和 D2 中的四个列表框值时计算。在这种情况下,您不会喜欢为每个列表更改运行宏,而只是在选择所有列表框中的值并计算 D3 之后。因此,在这种情况下,您可以只将宏分配给最后一个列表框,而不是将宏分配给所有列表框。

Third

到现在为止,您一定已经明白有两个事件正在发生。一是列表框值的选择,二是计算。在第二种情况下,如果您想为计算中的每个更改运行宏,例如当您选择 A2 和当您选择 B2 等时,您可以简单地使用计算事件而不是为每个列表框分配宏。每次更改值导致工作表计算时,它将运行。

为列表框(表单控件)分配宏---您可以直接为列表框分配一个宏。首先在VBA中创建一个宏。然后只需右键单击列表框并单击分配宏。然后选择要分配的宏。.. 当您单击列表框更改值时,将运行宏

此外,由于您要跟踪使用宏计算的结果,因此需要先计算工作表。为了安全起见,使用Worksheet.Calculate 方法启动宏(以防公式结果由于某种原因未更新)。


推荐阅读