Excel 取消对工作表的保护,保护一些单元格,并保留其他单元格

Excel 取消对工作表的保护,保护一些单元格,并保留其他单元格,excel,vba,userform,Excel,Vba,Userform,我有以下代码: Sub UnProtect4User() Dim ws As Workbook Set ws = ActiveWorkbook Worksheets("Datos").Unprotect Password:="2020" MsgBox "The Sheet is unprotected" ws.Sheets("Datos").Range("A2:J350").Locked = False ws.Sheets("Datos").Protect Password:="2020

我有以下代码:

Sub UnProtect4User()
Dim ws As Workbook

Set ws = ActiveWorkbook

Worksheets("Datos").Unprotect Password:="2020"
MsgBox "The Sheet is unprotected"

ws.Sheets("Datos").Range("A2:J350").Locked = False

ws.Sheets("Datos").Protect Password:="2020"

MsgBox "Now you can edit"

End Sub

打开工作簿时,所有工作表都受到保护。如果我按下一个按钮,上面的代码将运行以锁定上面有公式的单元格,这样用户就不能触摸它们,并让它们更改其他免费的单元格。 问题是,当最后一行激活时,它会再次保护所有板材


文件如下:

如果取消选中“保护工作表”对话框中的“选择未锁定单元格”选项,则即使是未锁定的单元格也无法编辑,因为用户无法选择它们。

此工作簿中
这是新代码:

Private Sub Workbook_Open()
Dim ws As Workbook

Set ws = ActiveWorkbook

ClearFilters

Worksheets("Datos").Unprotect Password:="2020"

With Worksheets("Datos")
.EnableSelection = xlNoSelection

ws.Sheets("Datos").Range("A2:N350").Locked = True
End With

Worksheets("Datos").Protect Password:="2020", Contents:=True, _
        AllowInsertingColumns:=False, AllowInsertingRows:=False, _
        AllowDeletingColumns:=False, AllowDeletingRows:=False, _
       AllowSorting:=True, AllowFiltering:=True

End Sub
在模块中:

Dim ws As Workbook

Set ws = ActiveWorkbook

Worksheets("Datos").Unprotect Password:="2020"

With Worksheets("Datos")
.EnableSelection = xlUnlockedCells

ws.Sheets("Datos").Range("A2:L350").Locked = False

ws.Sheets("Datos").Protect Password:="2020"

End With

MsgBox "It's now unprotected, so you can work on it buddy."

End Sub

这一切都按照它的预期工作,因此感谢Tim Williams的帮助

公式的范围是什么?@TimWilliams从M:2到N:350,但我也想包括K:2到L:350,因为它的数据存储在登录用户的数据中,所以我不希望有任何更改。一旦保护工作表,解锁的单元格就不应该受到保护。类似的代码对我来说效果很好。我试了几次,所有的单元格都被锁定了,这看起来很奇怪,因为我声明不锁定这些单元格范围。如果添加
Debug.Print ws.Sheets(“Datos”).range(“A2”)会发生什么.Locked
就在
结束子项
之前?我找到了一种手动执行此操作的方法,但找不到哪个代码触发该选项您必须在某个点设置它,并且它一直存在。请参见此处,了解如何通过VBA实现这一点:卓越,现在我让它工作起来了。还有一个问题,是否有办法恢复所选内容,这样当excel打开时,所有工作簿都会像以前一样受到保护?是的-在工作簿的“打开”子部分中,您将取消对工作表的保护,锁定所有单元格,然后重新保护工作表。