excel - 如何在单元格更新/更改时运行 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
非常感谢!
解决方案
Worksheet_Change
重新计算公式时不会触发该事件。您需要Worksheet_Calculate
为该场景使用该事件。该Calculate
事件没有Target
参数。- 毯子
On Error Resume Next
隐藏了所有潜在的错误,被认为是不好的做法。 Me
在工作表中,代码隐藏是指该工作表,并且比 . 更可取ActiveSheet
。- 您可以使用常量
vbGreen
和vbRed
代替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
推荐阅读
- hadoop-yarn - aws emr 的 dask 引导操作仅部署到主节点而不是工作节点
- intellij-idea - 在 IntelliJ Idea 中拉取/合并:“错误:已跳过...没有默认更新路径。”
- google-apps-script - 如何将数据与单个键和多个值链接
- google-apps-script - 从 Python 向 Google Apps 脚本传递数据。怎么了?
- oracle - 每位独特员工的最新认证
- laravel - 在 Laravel 中调用资源中的图像
- android - 一个应用程序可以访问android中另一个应用程序的屏幕吗?
- javascript - 为什么我的 POST 请求在 30 秒后抛出 503?
- wordpress - 我可以直接从 IntelliJ 运行 WordPress 吗?
- haskell - How to cast `forall a. a -> a` back to `a -> a`?