Как предотвратить модификации конкретных клеток? - PullRequest
1 голос
/ 01 августа 2011

Можно ли предотвратить сделанные пользователем модификации некоторых конкретных ячеек?Я могу использовать надстройку VSTO для подключения к событиям Excel.

Ответы [ 2 ]

1 голос
/ 26 августа 2011

Мой подход немного другой.

Я защищаю весь лист, а затем разблокирую отдельные ячейки, столбцы или строки, чтобы пользователь мог заполнить данные на этих листах. Но вы должны получить те же результаты с этим.

Код был протестирован на VS 2008.

private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {

            var activesheet = (Excel.Worksheet)this.Application.ActiveSheet;


            // keep particular cell unlocked 
            activesheet.get_Range("A1",missing).Locked = false;

            // keep entire row unlocked 

            activesheet.get_Range("B2", missing).EntireRow.Locked = false;

            // keep entire column unlocked 

            activesheet.get_Range("C1", missing).EntireColumn.Locked = false;

            // keep particular range (D4 - E8) unlocked 

            activesheet.get_Range("D4","E8").Locked = false;

            activesheet.Protect(missing, missing, missing, missing, missing, missing, missing,
                                    missing, missing, missing, missing, missing, missing, missing, missing, missing);


        }

Когда пользователь нажимает на заблокированную ячейку, Excel выдает предупреждающее сообщение о том, что ячейка заблокирована. Это раздражает пользователя. Вы можете отключить displayalerts.

Просто используйте

this.Application.DisplayAlerts = false;

в ThisAddIn_Startup(object sender, System.EventArgs e) непосредственно перед объявлением var activesheet и не забудьте снова включить его, используя

private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
            this.Application.DisplayAlerts = true;
        }

Это позаботится о надоедливом предупреждающем сообщении.

1 голос
/ 06 августа 2011

Взгляните на Worksheet.Change Event . Это событие принимает объект Range. Насколько я помню, этот объект содержит информацию о том, какие ячейки выбраны. Тогда вы можете делать с этой ячейкой все, что захотите ссылка .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...