如何锁定工作表中的特定范围但不锁定工作表

时间:2019-08-20 14:14:17

标签: excel vba locking

我只想保护工作表中的范围D1:D9,以防止用户进行编辑。但是,我不想保护整个表。有办法解决吗?我一直在阅读帖子并尝试实现其代码等,但是它们似乎都不适合我。非常感谢您的帮助!

Private Sub Workbook_Open()
Dim Sheet1 As Worksheet
Set Sheet1 = Sheets("Screening Request")
Sheet1.Cells.Locked = False

Sheet1.Range("D1:D9").Locked = True

' set the value
Sheet1.Protect

End Sub

2 个答案:

答案 0 :(得分:3)

  1. Unlock所有单元格:

    ws.Cells.Locked = False
    
  2. 锁定您的

    ws.Range("D1:D9").Locked = True
    
  3. Protect特定工作表。

    Dim ws As Worksheet
    ' set the value
    ws.Protect
    

答案 1 :(得分:1)

以下代码按预期工作,并且如果您想更改锁定范围,则可以多次运行:

Private Sub Workbook_Open()
Dim Sheet1 As Worksheet
Set Sheet1 = Sheets("Screening Request")
Sheet1.Unprotect
Sheet1.Cells.Locked = False
Sheet1.Range("D1:D9").Locked = True
Sheet1.Protect
End Sub

它取消保护工作表,因此从上次保护工作表时不会引发错误。然后解锁所有单元格,因此只有指定范围被锁定,而没有别的。然后锁定指定范围。然后重新保护工作表。

编辑根据psyduck的注释,在使用范围时合并单元格是一个问题。在这种情况下,两列已完全合并,因此在合并的范围不是整个范围的情况下,可以将范围更改为"D1:F9",例如:

Sheet1.Range("D1:D8").Locked = True
Sheet1.Range("D9:F9").Locked = True

感谢Mathieu Guindon的建议。