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

问题描述 投票:0回答:3

我想仅保护工作表中的 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
excel vba locking
3个回答
2
投票
  1. 解锁所有单元格:

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

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

    Dim ws As Worksheet
    ' set the value
    ws.Protect
    

0
投票

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

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

它会取消对工作表的保护,因此不会在您上次保护它时抛出错误。然后解锁所有单元格,因此仅锁定指定范围,而不锁定其他任何内容。然后它锁定指定的范围。然后它会重新保护纸张。

编辑 根据 psyduck 的评论,合并单元格在处理范围时是一个问题。在这种情况下,两列完全合并,因此范围可以更改为

D1:F9
,如果不是合并的整个范围,请执行单独的实例,如下所示:

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

感谢 Mathieu Guindon 的建议。


-1
投票

我做错了什么? 我收到错误“无法将范围属性设置为“锁定”

For i = 1 To ActiveWorkbook.Worksheets.Count
For j = 1 To 2000
For k = 1 To 500
If ActiveWorkbook.Worksheets(i).Cells(j, k).Interior.color = color 
Then 
ActiveWorkbook.Worksheets(i).Range(ActiveWorkbook.Worksheets(i).Cells(j, 
k), ActiveWorkbook.Worksheets(i).Cells(j, k)).Locked = False
Next k
Next j
Next i
© www.soinside.com 2019 - 2024. All rights reserved.