跳到主要内容

 单元格公式结果更改时如何自动运行宏?

假设我有一个基于A列和B列中数据的公式列表,如下图所示,现在,我想在公式结果随其相对单元格变化而变化时自动运行特定的宏代码。 有什么好主意可以在Excel中解决此工作吗?

当单元格公式结果随VBA代码更改时自动运行宏


当单元格公式结果随VBA代码更改时自动运行宏

以下VBA代码可以帮助您在公式结果单元格更改时自动执行特定代码,请按照以下步骤操作:

1。 用鼠标右键单击您要使用的工作表选项卡,然后选择 查看代码 从上下文菜单中,在打开的 适用于应用程序的Microsoft Visual Basic 窗口,将以下代码复制并粘贴到空白模块中:

VBA代码:单元格公式结果更改时自动运行宏:

Private Sub Worksheet_Calculate()
'Updateby Extendoffice
    Dim Xrg As Range
    Set Xrg = Range("C2:C8")
    If Not Intersect(Xrg, Range("C2:C8")) Is Nothing Then
    Macro1
    End If
End Sub

备注:在上面的代码中, C2:C8 是您要使用的公式单元格的范围,宏1 是要自动运行的宏的名称。 请根据您的需要进行更改。

2。 然后保存并关闭此代码窗口,现在,当范围A2:B8中的数据更改导致公式结果更改时,将立即触发您的特定宏代码。

最佳办公生产力工具

🤖 Kutools 人工智能助手:基于以下内容彻底改变数据分析: 智能执行   |  生成代码  |  创建自定义公式  |  分析数据并生成图表  |  调用 Kutools 函数...
热门特色: 查找、突出显示或识别重复项   |  删除空白行   |  合并列或单元格而不丢失数据   |   不使用公式进行四舍五入 ...
超级查询: 多条件VLookup    多值VLookup  |   跨多个工作表的 VLookup   |   模糊查询 ....
高级下拉列表: 快速创建下拉列表   |  依赖下拉列表   |  多选下拉列表 ....
列管理器: 添加特定数量的列  |  移动列  |  切换隐藏列的可见性状态  |  比较范围和列 ...
特色功能: 网格焦点   |  设计图   |   大方程式酒吧    工作簿和工作表管理器   |  资源库 (自动文本)   |  日期选择器   |  合并工作表   |  加密/解密单元格    按列表发送电子邮件   |  超级筛选   |   特殊过滤器 (过滤粗体/斜体/删除线...)...
前 15 个工具集12 文本 工具 (添加文本, 删除字符,...)   |   50+ 图表 类型 (甘特图,...)   |   40+ 实用 公式 (根据生日计算年龄,...)   |   19 插入 工具 (插入二维码, 从路径插入图片,...)   |   12 转化 工具 (小写金额转大写, 货币兑换,...)   |   7 合并与拆分 工具 (高级组合行, 分裂细胞,...)   |   ... 和更多

使用 Kutools for Excel 增强您的 Excel 技能,体验前所未有的效率。 Kutools for Excel 提供了 300 多种高级功能来提高生产力并节省时间。  单击此处获取您最需要的功能...

产品描述


Office Tab 为 Office 带来选项卡式界面,让您的工作更加轻松

  • 在Word,Excel,PowerPoint中启用选项卡式编辑和阅读,发布者,Access,Visio和Project。
  • 在同一窗口的新选项卡中而不是在新窗口中打开并创建多个文档。
  • 每天将您的工作效率提高50%,并减少数百次鼠标单击!
Comments (10)
No ratings yet. Be the first to rate!
This comment was minimized by the moderator on the site
Hello team,

I know this is a old topic but how to have a mix between this calculate method and this: https://www.extendoffice.com/documents/excel/1895-excel-record-date-and-time-when-cell-changes.html?

The goal is to record a date on the next cell every time that the calculated values change for every cell in a column.

Regards,
Tiago
This comment was minimized by the moderator on the site
Hey guys,
Below is the code and I want to lock cells A2 and A3 after cell A1 (A1 = B1+C1) is changing in results change either B1 or C1 or both. But it does not work. Could anyone help with that, please?

Private Sub Worksheet_Calculate()

Dim sPass
sPass = "123"
Dim rng As Range
Set rng = [A2:A3]
If Not Intersect(rng, [A1]) Is Nothing Then
With ActiveSheet
.Unprotect Password:=sPass
.Cells.Locked = False
Static oldValue
If Range("A1") <> oldValue Then
rng.Locked = True
.Protect Password:=sPass
oldValue = Range("A1").Value

End If
End With

End If
End Sub
This comment was minimized by the moderator on the site
"Set Xrg = Range("C2:C8")
If Not Intersect(Xrg, Range("C2:C8")) Is Nothing Then"
this condition is ALWAYS encountered....
Make sense ???
Or is there something I didn't understand ?
This comment was minimized by the moderator on the site
That right, did you solve this problem, and could you share for me, please?
This comment was minimized by the moderator on the site
Hey guys,
I used the following code for this problem, hope it helps someone:

Private Sub Worksheet_Calculate()
Static oldValue
If Range("MyNamedRange") <> oldValue Then
CodeHere
oldValue = Range("MyNamedRange").Value
End If
End Sub
This comment was minimized by the moderator on the site
sorry it dosn't work it works if i put data manually. but i want to work it automatically bcz my data is updating by rand calcaulate
This comment was minimized by the moderator on the site
So, what is my macro name. where can i find my macro name?
This comment was minimized by the moderator on the site
Hello, Cenk,
The macro name is the macro code you have inserted into the Excel file, and you just need to change the Macro1 in the above code to your own.
For example, i insert a code here, and the macro name is: ColorCompanyDuplicates

Sub ColorCompanyDuplicates()
'Updateby Extendoffice 20160704
Dim xRg As Range
Dim xTxt As String
Dim xCell As Range
Dim xChar As String
Dim xCellPre As Range
Dim xCIndex As Long
Dim xCol As Collection
Dim I As Long
On Error Resume Next
If ActiveWindow.RangeSelection.Count > 1 Then
xTxt = ActiveWindow.RangeSelection.AddressLocal
Else
xTxt = ActiveSheet.UsedRange.AddressLocal
End If
Set xRg = Application.InputBox("please select the data range:", "Kutools for Excel", xTxt, , , , , 8)
If xRg Is Nothing Then Exit Sub
xCIndex = 2
Set xCol = New Collection
For Each xCell In xRg
On Error Resume Next
xCol.Add xCell, xCell.Text
If Err.Number = 457 Then
xCIndex = xCIndex + 1
Set xCellPre = xCol(xCell.Text)
If xCellPre.Interior.ColorIndex = xlNone Then xCellPre.Interior.ColorIndex = xCIndex
xCell.Interior.ColorIndex = xCellPre.Interior.ColorIndex
ElseIf Err.Number = 9 Then
MsgBox "Too many duplicate companies!", vbCritical, "Kutools for Excel"
Exit Sub
End If
On Error GoTo 0
Next
End Sub
This comment was minimized by the moderator on the site
What's the point of the condition? It'll always return true...in other words: it'll run without it. This also runs whenever any cells on the sheet change value.
This comment was minimized by the moderator on the site
Thanks a lot! This really helped me out.
Is there any method to retrieve the address of the changed cell (with formula i.e Column C in this example).
Thanks.
There are no comments posted here yet
Please leave your comments in English
Posting as Guest
×
Rate this post:
0   Characters
Suggested Locations