[*] Я попытался использовать Appevents и более конкретно Sheetchange, но не нашел способ отменить изменения. Я полагаю, что нет ничего, но дайте мне знать, если я ошибаюсь, < /li>
Я знаю, что пакет отмены где -то существует, но не смотрел, работает ли он с событиями, потому что:
- Я бы предпочел избегать внешних пакетов < /li>
В моей ситуации будет запустить цепь Sheetchange , что, очевидно, не работает без добавления дополнительной сложности
Код: Выделить всё
Undo()
Есть ли способ предотвратить вставку /удаление столбцов в листах Excel, в частности, C#, не блокируя что -либо еще и, если возможно, простым образом?
спасибо . < /p>
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
Мобильная версия