[英]unlock specific area in a protected excel sheet with vba
我必须在Excel工作表中解锁特定范围(D6:BC116) 。 其他人应该可以编辑该特定区域。 所以应该为他们解锁。 首先,我手动保护整个工作表而无需任何代码。 之后,我想取消保护特定区域以进行编辑。 但是总会出问题。 我有这两个代码。 第一个代码具有hidden属性,它仅隐藏空单元格。 保护整个工作表后,我尝试取消保护要编辑的特定区域的其他代码。 由于隐藏的属性,我不确定该问题是否在第一个代码中? 而且我不确定他们是否有关系?
Private Sub Worksheet_Change(ByVal Target As Range)
For Each cell In Range("B6:B112")
If cell.Value <> "" Then
cell.EntireRow.Hidden = False
Else
cell.EntireRow.Hidden = True
End If
Next cell
End Sub
Sub UnlockCells()
Worksheets("Sheet1").Range("D6:BC116").Locked = False
Worksheets("Sheet1").Protect
End Sub
当我执行此操作时,我总是得到“索引超出范围”
谢谢!
我认为您需要在解锁之前解除保护。 像这样:
With Worksheets("Sheet1")
.Unprotect "MyLongAndSecurePassword"
.Range("D6:BC116").Locked = False
.Protect
End with
关于代码的第一部分-确保使用一个未命名为cell
的变量,因为cell
由VBEditor使用。 将您的变量rngCell
, myCell
或除cell
其他任何名称。 并这样声明: Dim rngCell as Range
。
最后一点-锁定工作表并尝试手动隐藏和取消隐藏行。 可能吗? 如果不是,则知道错误的原因。
编辑:
要检查工作表是否受保护,请在Worksheet_Change中尝试以下操作:
Private Sub Worksheet_Change(ByVal Target As Range)
If Worksheets("Sheet1").ProtectContents Then Exit Sub
For Each cell In Range("B6:B112")
If cell.Value <> "" Then
cell.EntireRow.Hidden = False
Else
cell.EntireRow.Hidden = True
End If
Next cell
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.