工作表保持对所有单元格的保护

时间:2014-01-08 10:40:44

标签: excel vba excel-vba

我有以下代码设置,但我需要它来停止保护不需要保护的其他单元。我无法通过格式化单元格解锁cels - 保护,因为当B7:B1000包含文本“PA”“PU”时我需要确定单元格锁定。如果它是空白的或有任何其他文本,它不应该保护这些细胞。

Private Sub Worksheet_Change(ByVal Target As Range)

On Error GoTo ErrorHandler
Application.EnableEvents = False 'prevent infinite event loops

Me.Unprotect ' else won't be able to modify locked cells

If Not Intersect(Target, Range("B7:B1000")) Is Nothing Then
    'User edited a cell in this range.
    With Range("F1:M1").Offset(Target.Row - 1, 0)
        If (Target.Value = "PA" Or Target.Value = "PU") Then
            .Interior.Color = RGB(77, 77, 77) 'gray
            .Locked = True
        Else
            .Interior.Color = RGB(255, 255, 255) 'white
            .Locked = False
        End If

    End With
End If

ExitProcedure:
    Me.Protect
    Application.EnableEvents = True
    Exit Sub
ErrorHandler:
    MsgBox Err.Description
    Resume ExitProcedure

Set wkB = Nothing

End Sub

1 个答案:

答案 0 :(得分:1)

就像我在评论中提到的那样,问题不在于代码。您遇到的是excel的默认行为。默认情况下,所有excel单元格的.Locked属性都为Checked。您需要做的是在分发工作簿之前先准备好工作表。

准备工作表

  1. 评论所有Worksheet_Change代码。这一点非常重要,否则当我们进行以下更改时,您的Worksheet_Change代码会自动触发。

  2. 手动取消保护工作表。

  3. 接下来删除B7:B1000中的所有值。

  4. 选择F7:M1000并右键单击它并将其锁定属性设置为False。这是必需的,否则Excel会lock单元格中是否存在值B列中的值,因为默认.Locked保护True

  5. 取消评估所有Worksheet_Change代码

  6. 最后重新保护您的工作表,您就完成了。

  7. 通过评论进行跟进

    注释代码意味着在代码的每一行之前放置',否则当您从Col B手动删除值时代码将触发。

    您还可以通过选择完整代码并单击编辑工具栏中的“注释块”图标来批量注释代码。要激活“编辑”工具栏,请在VBA编辑器中选择“查看|工具栏 - 编辑”菜单,如下面的屏幕截图所示。

    enter image description here