首页 > 解决方案 > 如何在单元格更新/更改时运行 VBA 代码

问题描述

所以我下面的代码适用于根据 J1 中的值将 activex 控制命令按钮从红色更改为绿色,但是 J1 值会发生变化。

现在我希望我的代码根据 J1 是否发生变化来更新。有没有办法在单元格 J1 改变后强制它再次运行?

    Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, [J1]) Is Nothing Then
For Each obj In ActiveSheet.OLEObjects
If obj.Name = "CommandButton8" Then
With obj
If [J1].Value >= 1 Then .Object.BackColor = RGB(0, 255, 0)
If [J1].Value = 0 Then .Object.BackColor = RGB(255, 0, 0)
End With
End If
Next
End If
On Error GoTo 0
End Sub

非常感谢!

标签: excelvbaexcel-formula

解决方案


  • Worksheet_Change重新计算公式时不会触发该事件。您需要Worksheet_Calculate为该场景使用该事件。该Calculate事件没有Target参数。
  • 毯子On Error Resume Next隐藏了所有潜在的错误,被认为是不好的做法。
  • Me在工作表中,代码隐藏是指该工作表,并且比 . 更可取ActiveSheet
  • 您可以使用常量 vbGreenvbRed代替RGB函数。
Private Sub Worksheet_Calculate()
    For Each obj In Me.OLEObjects
        If obj.Name = "CommandButton8" Then
           If Me.Range("J1").Value >= 1 Then 
              obj.Object.BackColor = vbGreen
           ElseIf Me.Range("J1").Value = 0 Then 
              obj.Object.BackColor = vbRed
           End If
        End If
    Next
End Sub

推荐阅读