2011-08-01 80 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; 
     } 

這會照顧惱人警報消息的啓用它。