excel 根据另一个单元格的值锁定/解锁单元格

9lowa7mx  于 2023-03-13  发布在  其他
关注(0)|答案(1)|浏览(444)

我想根据另一个单元格的值来锁定/解锁单元格。我将把我想锁定的单元格称为“Data_Cell”,把其值决定是否应该锁定的单元格称为“Permission_Cell”。我正尝试通过Worksheet_Change来完成此操作:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  With ThisWorkbook.Worksheets("Sheet1")
  
    Application.EnableEvents = False
  
    .Unprotect Password:=""
    
    If Not Intersect(Target, .Range("Permission_Cell")) Is Nothing Then
      If .Range("Permission_Cell").Value = "No" Then
        .Range("Data_Cell").Formula = "=Some_Other_Named_Range"
        .Range("Data_Cell").Locked = True
      Else
        .Range("Data_Cell").Locked = False
      End If
    End If
    
  Application.EnableEvents = True
  .Protect Password:="", AllowFiltering:=True, AllowSorting:=True, UserInterFaceOnly:=True, AllowFormattingCells:=True, DrawingObjects:=True
    
  End With
  
End Sub

请注意,Permission_Cell处于未锁定状态,并且可以在“是”/“否”之间进行更改。当Permission_Cell为“否”时,Data_Cell应具有公式“=Some_Other_Named_Range”,并且应处于锁定状态。否则,Data_Cell应处于未锁定状态,并且可以进行编辑。
当我执行此操作并在Permission_Cell中输入“否”时,Excel指示工作表受保护且Data_Cell已锁定(注意挂锁图标已突出显示)。但是,我仍然可以在Data_Cell中输入不同的值。如果我单击“取消工作表保护”,然后单击“保护工作表”,则Data_Cell已正确锁定。为什么通过VBA进行的锁定不起作用?

dvtswwa3

dvtswwa31#

如果您的代码存在于工作表的模块中,则将第二行更改为:与我同行
在我的办公室里工作得很好

Private Sub Worksheet_Change(ByVal Target As Range)
  With Me
  
    Application.EnableEvents = False
  
    .Unprotect Password:=""
    
    If Not Intersect(Target, .Range("Permission_Cell")) Is Nothing Then
      If .Range("Permission_Cell").Value = "No" Then
        .Range("Data_Cell").Formula = "=Some_Other_Named_Range"
        .Range("Data_Cell").Locked = True
      Else
        .Range("Data_Cell").Locked = False
      End If
    End If
    
  Application.EnableEvents = True
  .Protect Password:="", AllowFiltering:=True, AllowSorting:=True, UserInterFaceOnly:=True, AllowFormattingCells:=True, DrawingObjects:=True
    
  End With
  
End Sub

相关问题