2016-09-28 99 views
1

所以我有一个电子表格,我想基于用户输入进行格式化,但单元格需要保持锁定状态,直到通过格式确定它们将成为用户输入单元格为止。 我有代码只会查看用户界面的单元格,但允许VBA编辑它们。使用VBA去保护单元格

> 'protects all sheets upon opening work book 
>  Me.Worksheets("Sheet1").Protect "Password", UserInterfaceOnly:=True 
>  Me.Worksheets("Sheet2").Protect "Password", UserInterfaceOnly:=True 
>  Me.Worksheets("Sheet3").Protect "Password", UserInterfaceOnly:=True 

所以现在我需要,以允许以下细胞由用户

Sheets("Sheets2").Protection.AllowEditRanges.Add "Test", Range("C2", "C8") 
Sheets("Sheets2").Protection.AllowEditRanges.Add "Test", Range("H6") 
Sheets("Sheets2").Protection.AllowEditRanges.Add "Test", Range("K6") 

我试图允许编辑之前我锁定片和后是可编辑的。 我真的很喜欢的是一些VBA代码在应用格式化后解锁单元格,而不是定义哪些单元格可以提前编辑。 感谢任何帮助:)

回答

1

更改范围的Locked属性。

Range("C2", "C8").Locked = false 

这相当于使用Format Cells |保护|锁定复选框可从单元中删除保护,并使单元立即可用于编辑。

此外,以备将来使用,你可能要考虑增加一个简单的循环,以保护步:

Dim sht as Worksheet 

For each sht in ThisWorkbook.Sheets 
    sht.protect password:=Password, Userinterfaceonly:=True 
Next sht 

这样的人无法通过添加新张左右的限制获得和保护将继续工作,如果工作表重命名等。

+0

谢谢,这很好。在保护环路上也是一个好的提示。 –