Я хотел бы помешать пользователю сделать это, чтобы защитить данные в файлах. do < /li>
[*] Я попытался использовать Appevents и более конкретно Sheetchange, но не нашел способ отменить изменения. Я полагаю, что нет ничего, но дайте мне знать, если я ошибаюсь < /li>
Я знаю, что пакет отмены где -то существует, но не смотрел, работает ли он с событиями, потому что:
- Я бы предпочел избегать внешних пакетов < /li>
В моей ситуации будет запустить цепь Sheetchange , который, очевидно, не работает без добавления дополнительной сложности
Код: Выделить всё
Undo()
Есть ли способ предотвратить вставку/делецию в Excel, специфически, не зафиксируя что-либо еще и, если это возможно, просто? /> thanks.
edit - update < /strong>
Я до сих пор настраивал импровизированное решение, которым я поделюсь здесь: < /p>
Код: Выделить всё
AppEvents_SheetChangeEventHandler EventSheetChangeHwnd;
private void ThisAddin_Startup(object sender, EventArgs e)
{
Application.SheetChange -= EventSheetChangeHwnd;
EventSheetChangeHwnd = new AppEvents_SheetChangeEventHandler(SheetChange_Event);
Application.SheetChange += EventSheetChangeHwnd;
}
private void SheetChange_Event(Object Sh, Range Target)
{
if(!Target.Address.Equals(Target.EntireColumn.Address)) // Can use Target.Row != 1 too to check faster and remove unwanted occurences
return;
Application.EnableEvents = false; // Prevents event from re-firing after undo
Application.Undo(); // Native undo method
Application.EnableEvents = true;
}
< /code>
Теперь это не является правильным решением, потому что: < /p>
[list]
[*] Событие запускает каждый раз, когда значение меняется в листе, если вы пишете ячейку данных по ячейке, он будет стрелять каждый раз и может попасть в точку, где вы видите падение скорости обработки < /li>
. Вставка/делеция
[*] Необходимость использования Application.enableEvents [/list]
Подробнее здесь: https://stackoverflow.com/questions/794 ... in-c-sharp
Мобильная версия