如何防止特定细胞的修改?
是否有可能阻止用户对某些特定单元格进行修改? 我可以使用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; }
这将照顾恼人的警报消息。