如何防止特定细胞的修饰?

时间:2011-08-01 04:40:42

标签: excel vsto

是否可以防止用户对某些特定细胞进行修改?我可以使用VSTO加载项插入Excel事件。

2 个答案:

答案 0 :(得分:1)

看看Worksheet.Change Event。此事件采用Range对象。据我所知,这个对象包含有关选择哪个单元格的信息。然后,无论你想要什么link,你都可以使用这个单元格。

答案 1 :(得分:1)

我的方法略有不同。

我保护完整的工作表,然后解锁特定的单元格或列或行,以便用户可以填写这些工作表中的详细信息。但你应该得到相同的结果。

代码已在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;
        }

这将处理烦人的警报信息。