单元格值更改时自动运行宏(不会被用户更改)

时间:2013-11-28 22:15:08

标签: excel vba cell

有没有办法在更改值时更改宏,而不一定是在用户更改值时?

例如,我有一个链接到单元格“A1”的复选框。选中该复选框后,如果未选中,则A1读为“TRUE”,显示为“FALSE”。当A1在TRUE和FALSE之间变化时,我希望运行一个宏。

我已经看过Private Sub Worksheet_Change代码,但这似乎仅在用户实际更改单元格A1时才有效。还有另一种自动运行宏的方法吗?

更新11/29/13 谢谢大家的建议,但不幸的是它还没有完成。让我试着进一步扩大。

我有一个带有复选框,下拉列表和文本字段的用户表单。用户表单中的所有数据都汇总在工作表的B列中(这是所有用户表单字段都链接的位置)。当宏运行时,会发生一些计算,并且用户会获得一些数字。

当用户更改用户表单中的内容时,我希望宏自动运行。我知道这可能会成为资源密集型的,但是当涉及到它时我会处理这个问题。我想有一个程序,说明如果B1:B20范围内任何单元格的值发生变化,那么运行宏。我相信这种方法比告诉每个用户表单字段运行相同的宏更容易,因为以后更容易扩展和更新此表单,特别是如果其他人接管维护。

我可以只有一个按钮,用户可以在填写表单时单击以运行宏,但我可以预见到不准确的信息,因为用户忘记重新计算;这就是我希望自动完成并且数字实时更新的原因。

3 个答案:

答案 0 :(得分:0)

据我所知,你必须列举可以改变的细胞或对任何细胞变化采取行动。这是一个示例函数。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" or Target.Address = "$A$2" Then
        Sheet1.Range("A3").Interior.Color = RGB(255, 0, 0)
    End If
End Sub

答案 1 :(得分:0)

在VBA功能的第一行使用“Application.Volatile”

Function A()
    Application.Volatile


End Function

答案 2 :(得分:-1)

Worksheet_Change始终有效,但你需要有application.enableevents = true或它不会。 但我不喜欢if target.address部分,我更喜欢:

Private Sub Worksheet_Change(ByVal Target As Range)
select case target.address 'or target.row, column...
  case "$A$1"
    application.enableevents=false 'or the change sub will trigger again on changes!
    code
    application.enableevents=true
  case "$A$2"
    application.enableevents=false 'or the change sub will trigger again on changes!
    code
    application.enableevents=true
end select
end sub