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

是否有可能阻止用户对某些特定单元格进行修改? 我可以使用VSTO加载项来插入Excel事件。

看看Worksheet.Change Event 。 这个事件需要一个Range对象。 据我记得,这些对象包含有关select哪些单元的信息。 那么你可以用这个单元格来做任何你想要的链接 。

我的做法略有不同。

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

代码已经在VS 2008上testing过了。

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

当用户点击locking的单元格时,excel会抛出警告消息说单元格被locking。 它烦人的用户。 您可以禁用displayalerts

只是使用

 this.Application.DisplayAlerts = false; 

在声明var activesheet之前在ThisAddIn_Startup(object sender, System.EventArgs e) ,不要忘记启用它再次使用

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

这将照顾恼人的警报消息。