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, но поскольку эта проблема затрагивает надстройки VSTO, написанные на VB.NET и С#, тоже включаю теги.