excel - Worksheet_Change:由用户或宏触发
问题描述
在我的更改事件中,我需要捕获单元格的旧值,因此我使用了 Application.Undo。但是,我有一个进行更改的宏,它显然会清除撤消堆栈,但仍然依赖于更改事件过程的其余部分。
不能依赖选择更改事件,因为如果用户已经在单元格上,则不会触发此事件。无法使用隐藏/镜像表,因为我的完整应用程序基于主模板构建这些表。我必须复制用户从 Master 创建的尽可能多的工作表的信息。
并且使用 On Error Resume Next 是 kludgy 代码。
有没有办法检查撤消堆栈或确定更改事件是由用户交互还是我的宏引起的。
这是一个显示问题的快速演示:
Sheet1 代码隐藏:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim NewValue As String
Dim OldValue As String
On Error GoTo ErrorHandler
Application.EnableEvents = False
If Not Intersect(Target, Me.Range("F3")) Is Nothing Then
NewValue = Target.Value
Application.Undo
OldValue = Target.Value
Target.Value = NewValue
MsgBox "Changed from: " & OldValue & " to " & NewValue
End If
ErrorHandler:
If Err.Number > 0 Then MsgBox Err.Description
Application.EnableEvents = True
End Sub
标准模块代码:
Option Explicit
Sub MacroTest()
'clears undo stack
Sheet1.Range("F3").Value = "Macro Run"
End Sub
解决方案
跳过“NewValue = Target.Value”之后的步骤。在这些行之间添加逻辑:
NewValue = Target.Value
On Error Resume Next ' Add this line of code
Application.Undo
推荐阅读
- java - 如何在 Runnable 中提供影响当前活动的回调函数
- jsonschema - 如何使用 JSON Schema 按类型限制数组中的最大项目数?
- c# - 当我使用 c# 在 iis 上托管应用程序时,Quartz 调度程序不起作用
- javascript - 不同对象之间的javascript对象属性分配
- react-native - 执行 npx react-native run-android 时出错
- assembly - x86 ASM:无用的条件跳转?
- google-apps-script - Google API 邮件与电子邮件合并为 pdf
- reactjs - 从错误中获取无效的 yup 项目的索引
- python - 数据帧上的循环和替换
- node.js - Docker Compose 本地目录未安装在远程部署中