2011-08-01 32 views
1

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

+0

我知道如何为vsto excel工作簿做到这一点。我应该把它作为答案吗?插件和工作簿的代码应该类似.. –

回答

1

看看Worksheet.Change Event。这个事件需要一个Range对象。据我记得,这些对象包含有关选择哪些单元的信息。然后你可以用这个单元格做任何你想要的link

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; 
     } 

这会照顾恼人警报消息的启用它。