Off*_*Dev 13 c# vb.net excel vba excel-vba
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
Run Code Online (Sandbox Code Playgroud)
然后,插入一个名为的新模块modTest
并粘贴以下代码:
Public Sub Undo()
MsgBox "This is the Excel 2016 bug."
End Sub
Run Code Online (Sandbox Code Playgroud)
最后,保存工作簿并重新打开它.在任何单元格中输入任何值以触发Application.SheetChange
事件.保存工作簿(由于某种原因,您可能需要执行此操作两次),并且modTest
将显示消息.
任何人都可以解释这里可能会发生什么,和/或如何解决这个问题?如果这确实是一个错误,向Microsoft报告的最佳方式是什么?
这段代码是VBA,但由于这个问题影响用VB.NET和C#编写的VSTO加载项,我也包括这些标签.