首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Worksheet_Change:由用户或宏触发

Worksheet_Change:由用户或宏触发
EN

Stack Overflow用户
提问于 2020-06-20 21:54:27
回答 1查看 40关注 0票数 0

在变更事件中,我需要捕获一个单元格的旧值,所以我使用了一个Application.Undo。但是,我有一个进行更改的宏,它明显地清除了撤销堆栈,但仍然依赖于其余的更改事件过程。

不能依赖选择更改事件,因为如果用户已经在单元格上,则此事件不会触发。无法使用隐藏/镜像工作表,因为我的完整应用程序基于主模板构建这些工作表。我将不得不复制的信息,为尽可能多的纸张,用户创建的主人。

接下来使用的是错误恢复程序,这是一种简单的代码。

是否有方法检查撤消堆栈或确定更改事件是由用户交互或我的宏引起的。

下面是一个展示问题的快速演示:

Sheet1代码-隐藏:

代码语言:javascript
运行
复制
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

标准模块代码:

代码语言:javascript
运行
复制
Option Explicit

Sub MacroTest()
    'clears undo stack
    Sheet1.Range("F3").Value = "Macro Run"
End Sub
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-20 23:02:39

跳过"NewValue = Target.Value“之后的步骤。在这些行之间添加逻辑:

代码语言:javascript
运行
复制
    NewValue = Target.Value
    On Error Resume Next ' Add this line of code
    Application.Undo
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62492159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档