使用 VBA 取消对单元格的保护

Kar*_*sby 2 excel vba protection cells

所以我有一个电子表格,我想根据用户输入设置格式,但单元格需要保持锁定状态,直到由格式确定它们将是用户输入单元格。我有代码只会查看用户界面的单元格,但允许 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
Run Code Online (Sandbox Code Playgroud)

所以现在我需要允许用户编辑以下单元格

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")
Run Code Online (Sandbox Code Playgroud)

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

Wer*_*rrf 5

更改Locked范围的属性。

Range("C2", "C8").Locked = false
Run Code Online (Sandbox Code Playgroud)

这等效于使用 Format Cells | 保护 | 锁定复选框以取消对单元格的保护,并使该单元格立即可用于编辑。

此外,为了将来使用,您可能需要考虑在保护步骤中添加一个简单的循环:

Dim sht as Worksheet

For each sht in ThisWorkbook.Sheets
    sht.protect password:=Password, Userinterfaceonly:=True
Next sht
Run Code Online (Sandbox Code Playgroud)

这样人们就无法通过添加新工作表来绕过限制,如果工作表被重命名等,保护将继续有效。