【问题标题】:Excel 2016 triggers undo upon save bug?Excel 2016 在保存错误时触发撤消?
【发布时间】:2016-10-26 22:59:37
【问题描述】:

Excel 2016 似乎会在保存时触发以编程方式添加的撤消级别,这在早期版本的 Excel(2013、2010 和 2007)中不会发生。要重现此明显错误,请打开一个新工作簿并将其保存为启用宏的工作簿(.xlsm 文件)。将以下代码粘贴到 ThisWorkbook 模块中:

Option Explicit
Public WithEvents App As Application
Private Sub Workbook_Open()
    Set App = Application
End Sub
Private Sub App_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Application.OnUndo "foo", "modTest.Undo"
End Sub

然后,插入一个名为modTest 的新模块并粘贴以下代码:

Public Sub Undo()
    MsgBox "This is the Excel 2016 bug."
End Sub

最后,保存工作簿并重新打开它。在任何单元格中输入任何值以触发Application.SheetChange 事件。保存工作簿(由于某种原因,您可能需要执行两次),modTest 中的消息将出现。

谁能解释这里可能发生了什么,和/或如何解决这个问题?如果这确实是一个错误,那么向 Microsoft 报告它的最佳方式是什么?

此代码是 VBA,但由于此问题也会影响用 VB.NET 和 C# 编写的 VSTO 加载项,因此我将这些标记包括在内。

【问题讨论】:

  • 有时可以使用 Microsoft Connect 报告错误,但 Office 目前似乎不在可用产品列表中。或者,Microsoft MVP 通常可以提醒正确的产品组并至少对其有所了解(我是 MVP - 我会稍微了解一下其他人的想法并将其转发给 MS如果一致认为它确实是一个错误)
  • 你甚至不需要使用事件,你只需要在任何地方执行Application.OnUndo "foo", "modTest.Undo"。至少这对我“有效”。之后,我需要保存两次。
  • @jdl134679 我只是想说我可以在没有事件 (App_SheetChange) 的情况下重现它,但只需在任何地方执行 .onUndo ...,例如在即时窗口中。所以问题不在于SheetChange 事件。
  • 我很想学习一种正确报告 Office 错误的方法。事实证明,Excel 2016 存在一些大问题,包括未记录的破坏行为(将这一行为添加到列表中!),而且似乎必须烧掉 500 美元的支持事件才能报告这些问题。
  • 更新:Microsoft 软件工程师已意识到该错误并正在努力修复。不清楚什么时候可能会发生,所以在此期间仍然对可行的解决方法非常感兴趣。

标签: c# vb.net vba excel


【解决方案1】:

我们已通过测试以及与 MS 软件工程师和支持人员的直接沟通确认,此错误已在 2016 年 7 月下旬/8 月初发布的 Office 版本中修复。

【讨论】:

    【解决方案2】:

    嗯,它现在又回来了 06-06-2019 如果 onChange 事件遇到任何更改,我将使用变量进行捕获。好痛

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-14
      • 2017-12-18
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多