首页 > 解决方案 > VBA在工作表的给定范围内保护和取消保护

问题描述

我已应用此宏来保护和取消保护工作表中给定范围的单元格这是我在此宏中面临的一个问题当我运行此宏时,此宏在给定的单元格 A1 到 D20 范围内进行保护,当我再次运行时这个宏在给定范围内取消保护它不是取消保护

Sub lockcells()
 Dim Rng
 Dim MyCell
 Set Rng = Range("A1:D20")
 For Each MyCell In Rng
 If MyCell.Value = "" Then
 Else: ActiveSheet.UnProtect Password:="123"
 MyCell.Locked = True
 MyCell.FormulaHidden = False
 ActiveSheet.Protect Password:="123", UserInterFaceOnly:=True
 End If
 Next
End Sub

我想用单个宏保护和取消保护

标签: excelvba

解决方案


一些小的调整使其“保护/取消保护”。我假设您只想保护/锁定一个为空的单元格。

Option Explicit

Sub lockcells()
Dim Rng As Range
Dim MyCell As Object

Set Rng = Range("A1:D20") 'Set range to lock cells

If ActiveSheet.ProtectContents = True Then 'Check if sheet is protected
    ActiveSheet.Unprotect Password:="123" 'Password to unprotect
Else
For Each MyCell In Rng
    If MyCell.Value <> "" Then 'If cell is empty, if not empty lock the cell
        MyCell.Locked = True 'Lock cell
        MyCell.FormulaHidden = False 'Don't hide formulas
    End If
Next MyCell
ActiveSheet.Protect Password:="123", UserInterFaceOnly:=True 'Protect Sheet
End If
End Sub

如果您希望除范围之外的所有单元格都是可编辑的,您可以添加以下代码:

'Else
    ActiveSheet.Cells.Locked = False
    ActiveSheet.Cells.FormulaHidden = False
    'For Each MyCell In Rng

这将使仅Range("A1:D20")受密码保护。所有其他单元格都可以自由编辑。


推荐阅读