繁体   English   中英

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

[英]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使用。 将您的变量rngCellmyCell或除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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM