excel - 列表框表单控件选择触发器 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
解决方案
当您询问触发事件以在选择列表框值(表单控件)时运行宏时,我相信这可以被视为答案。我相信有更好知识的人会改进它。
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 方法启动宏(以防公式结果由于某种原因未更新)。
推荐阅读
- javascript - SAPUI5 OData v4 模型验证与 cookie
- typescript - 未初始化的 TypeScript 类属性不会被迭代
- microsoft-graph-api - MS Graph Webhook 报告不存在的新电子邮件
- docker - 从一个容器远程登录到另一个容器失败
- android - 全屏 AlertDialog 是 Fragment 的替代品吗?
- git - git:如何检查特定子模块上的特定(最新)版本(使用 git submodule ...)
- wordpress - URL 重写 IIS 和 Wordpress
- javascript - 音量滑块问题(HTML5 视频)
- c# - 在 wpf 应用程序中使用 c# 使用事件处理程序使表格行焦点和松散焦点
- javascript - Sequelize 检查约束其他列