Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 1 And Target.Column = 1 Then
' If cell "A1" (row 1, column 1) is changed, then call the unlock function...
UnlockByRole
End If
End Sub
在VBA模块中,输入以下代码:
' This function is used to unlock cells via a range string, e.g. "C:D"
Sub UnlockColumns(ColumnRange As String)
ActiveSheet.Unprotect Password:="mypassword"
Cells.Locked = True
Cells(1, 1).Locked = False ' Cell A1 is always editable in this example
If ColumnRange <> "" Then
Columns(ColumnRange).Locked = False
End If
ActiveSheet.Protect Password:="mypassword", DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub
Sub UnlockByRole()
If Cells(1, 1).Value = "Manager" Then
UnlockColumns "C:D"
ElseIf Cells(1, 1).Value = "Worker" Then
UnlockColumns "E:F"
Else
UnlockColumns ""
End If
End Sub
2条答案
按热度按时间toiithl61#
这将为您提供方向:
krcsximq2#
以下是解决方案的一部分。可以在单元格A1中写入角色。此代码示例识别角色“Manager”和“Worker”。如果在单元格A1中写入了其中任何角色,则它将解锁列C:D或E:F。否则,将锁定所有单元格
首先,您需要在工作表上使用
Change
事件。这是通过在VBA编辑器中单击项目树中的Sheet1
来完成的。您在其中编写的代码如下:在VBA模块中,输入以下代码:
解释代码的第一部分添加了一个事件监听器。当您更改工作表中的某些内容时,它会被调用/触发。
第二部分用于解锁/锁定工作表的特定部分。函数
UnlockColumns
可用于解锁工作表的任何范围。它还锁定工作表的其余部分(本例中的“A1”除外)。函数UnlockByRole
仅用于检测您在单元格“A1”中输入的角色(即“Manager”或“Worker”..所有其他字符串将被忽略并锁定整个工作表)