我已经写了一些VBA代码到以下内容:
- 假设我有一个包含此列的电子表格
[Cost1] [Cost2] [Cost3] [TotalCost] [保证金%] [保证金$] [价格]
-
如果用户修改了成本,总成本会发生变化,保证金和价格会因为它们取决于成本和保证金百分比而变化
-
如果用户修改了价格,则成本不会改变,但保证金百分比和保证金$确实会发生变化,因为它们取决于新价格 .
我无法将受保护的公式添加到Price列,因为用户可能想要更改该值,因此公式将被删除 . 所以我决定编写VBA,它可以完美地计算 . 但是,我已经失去了一些excel最有 Value 的功能:例如如果想要将一个价格的值复制到其他几个行,它只会触发重新计算第一行的位置,而不是其他行 . 退出牢房后,我也失去了UNDO的能力 .
要检测单元格已被修改,我使用以下内容:
Private Sub Worksheet_Change(ByVal Target As Range)
If (Target.Column = Range("Price").Column)
Call calcMargins(Target.Row)
End If
If (Target.Column = Range("Cost1").Column) or _
If (Target.Column = Range("Cost2").Column) or _
If (Target.Column = Range("Cost3").Column) or
Call calcMargins(Target.Row)
Call calcPrice(Target.Row)
End If
1 回答
试试这个
我故意将代码分解为几个If语句和重复代码以便理解透视图 . 例如
请把它们放在一个共同的程序中 .
另请注意
Error Handling
和Application.EnableEvents
的使用 . 使用Worksheet_Change
时,这两个是 MUST .Application.EnableEvents = False
确保在有递归操作的情况下代码不会进入可能的无限循环 .Error Handling
不仅处理错误,还通过向您显示错误消息,然后将Application.EnableEvents
重置为True
并最终正常退出代码来阻止代码中断 .Code
我假设第1行受到保护,用户不会改变它 . 如果Header行未受保护,那么您将检查带有
If
语句的行号以排除第1行FOLLOWUP
啊,我看到你在尝试:)
使用此代码