是否可以防止用户对某些特定细胞进行修改?我可以使用VSTO加载项插入Excel事件。
答案 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;
}
这将处理烦人的警报信息。