【发布时间】: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 软件工程师已意识到该错误并正在努力修复。不清楚什么时候可能会发生,所以在此期间仍然对可行的解决方法非常感兴趣。