当单元格值因另一个宏而发生变化时执行宏

时间:2013-05-19 21:20:35

标签: excel-vba vba excel

我有一张带有两个按钮的工作表。一个按钮在单元格(E2)中放置一个值,另一个按钮在每次按下时将该值(在E2中)减1。我希望E2单元格中的值指示D2的颜色,这样只要单元格的值> 1,D2就是红色。 0 =绿色,当它=< 0

以下是我的两个按钮:

按钮1

Sub Use2()
     Range("e2").Value = Range("d2")
End Sub

按钮2

Sub Subtract1()
     Range("E2").Value = Range("E2").Value - 1
End Sub

我添加了这段代码:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = Range("E2").Address and Target.Value >0 Then
      Range("D2").Interior.Color = vbRed
  End If
End Sub

我甚至没有进入绿色部分,因为这只有在E2中手动输入大于0的值时才有效。如果E2的值变为值> 1,则它不起作用。 0按下按钮1.任何人都可以帮助我改变它,这样它的工作原理。谢谢!

2 个答案:

答案 0 :(得分:1)

每次使用Worksheet_Change事件时

1)使用Application.EnableEvents防止在其他代码运行时触发事件。

2)使用错误处理,以便将EnableEvents设置为True

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False

    On Error Resume Next

    If Not Intersect(Range("E2"), Target) Is Nothing Then

        If Target.Value > 0 Then
            Range("D2").Interior.Color = vbRed
        Else
            Range("D2").Interior.Color = vbGreen
        End If
    End If

    Application.EnableEvents = True
End Sub

也可以使用条件格式来实现。

enter image description here

答案 1 :(得分:0)

除了@Santosh关于在事件宏运行期间启用/禁用事件的注释之外,假设您的子例程都在工作表代码模块中,您可以简单地强制调用_Change事件,如下所示:

Sub Use2()
    Range("E2").Value = Range("E2")
    Worksheet_Change Range("E2")
End Sub

Sub Subtract1()
    Range("E2").Value = Range("E2").Value - 1
    Worksheet_Change Range("E2")
End Sub