使用vba解锁受保护的Excel表格中的特定区域

我必须在excel表格中解锁一个特定的范围(D6:BC116) 。 它应该能够让其他人编辑这个特定的区域。 所以应该为他们解锁。 起初,我手动保护整个表没有任何代码。 之后,我想取消保护特定区域进行编辑。 但是总是出错。 我有这两个代码。 第一个代码有隐藏的属性,它只隐藏空单元格。 我试图解除保护整个工作表后,我想要编辑的特定区域的其他代码。 我不确定是否由于隐藏属性而导致问题出现在第一个代码中? 我不确定他们是否在一个关系?

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 

关于代码的第一部分 – 请确保您使用一个variables,它不是命名cell ,因为VBEditor使用cell 。 命名您的variablesrngCellmyCell或其他任何东西,但cell 。 并像这样声明: Dim rngCell as Range

最后一点 – locking您的工作表,并尝试隐藏和手动取消隐藏行。 可能吗? 如果没有,你知道错误的原因。

编辑:

要检查工作表是否受到保护,请在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