首页 文章

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

提问于
浏览
0

我必须在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

当我执行此操作时,我总是得到 "Index out of range"

谢谢!

1 回答

  • 2

    我想你需要在解锁之前取消保护 . 像这样:

    With Worksheets("Sheet1")
     .Unprotect "MyLongAndSecurePassword"
     .Range("D6:BC116").Locked = False
     .Protect
     End with
    

    关于代码的第一部分 - 确保使用一个未命名为 cell 的变量,因为VBEditor使用了 cell . 将变量命名为 rngCellmyCell 或除 cell 之外的任何其他内容 . 并声明如下: Dim rngCell as Range .

    最后一点 - 锁定您的工作表并尝试隐藏和取消隐藏行 . 可能吗?如果没有,您就知道错误的原因 .

    Edit:

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

相关问题