我正在尝试使用 VBA 让一个单元格函数在每次用户更改特定单元格范围时更新
以下是我目前所掌握的信息:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim R As Range
Set R = Range("A6").EntireRow
If Intersect(R, Target) Is Nothing Then Exit Sub
Application.EnableEvents = False
R.Cells(7, 4).Value = Date
Application.EnableEvents = True
End Sub
这根本不起作用。我已经弄了好久了,但就是不能让它工作。
自动计算已开启。
宏已启用。
它不是一本共享的工作手册。
我将代码放入 Sheet1 而不是 Module1。
我究竟做错了什么?
答案1
对于遇到类似问题的人,Application.EnableEvents
应明智地使用。我怀疑您的情况是您Application.EnableEvents = false
在代码中设置了,然后在调试过程中停止了调试,或者抛出了错误。
当发生这种情况时,它会Application.EnableEvents
一直false
保持这种状态,直到您通过 VBA 启用它或重新启动 Excel。
防止这种情况的一种方法是使用On Error GoTo <Label>:
并在代码末尾设置标签以重新打开事件,确保如果代码失败,则可以重新启用事件。
On Error GoTo Finally:
<code here>
Finally:
Application.EnableEvents = True
答案2
根据我的理解,当您更改范围“A6”时,您正在尝试将范围“D7”的数据更改为当前日期,对吗?
如果是,您可以通过将上面的所有代码替换为以下内容来进行此类更改:
Target.Offset(1, 3).Value = Date
其中 Offset 表示向下移动 1 行 3 列。
现在,如果您想更改“D”列中当前行的日期,请执行此操作。
Target.Offset(0, 3).Value = Date
请不要做任何事情:
Application.EnableEvents