excel 基于组合框值解锁范围

rqcrx0a6  于 2022-12-24  发布在  其他
关注(0)|答案(2)|浏览(121)

我有一个用户表单登录,用户必须输入用户名和密码,并从组合框中选择自己的角色。我的工作表受密码保护,我想允许在组合框中选择了“x”角色的用户只允许在范围C:D中输入数据,允许具有“y”功能的用户只允许在范围E:F中输入数据。如果有人能帮助我,我该怎么做?

toiithl6

toiithl61#

这将为您提供方向:

With Sheets("Target")
    .Unprotect "Password"
    .Cells.Locked = True
    .[C:D].Locked = False
    .Protect "Password"
End With
krcsximq

krcsximq2#

以下是解决方案的一部分。可以在单元格A1中写入角色。此代码示例识别角色“Manager”和“Worker”。如果在单元格A1中写入了其中任何角色,则它将解锁列C:D或E:F。否则,将锁定所有单元格
首先,您需要在工作表上使用Change事件。这是通过在VBA编辑器中单击项目树中的Sheet1来完成的。您在其中编写的代码如下:

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

解释代码的第一部分添加了一个事件监听器。当您更改工作表中的某些内容时,它会被调用/触发。

第二部分用于解锁/锁定工作表的特定部分。函数UnlockColumns可用于解锁工作表的任何范围。它还锁定工作表的其余部分(本例中的“A1”除外)。函数UnlockByRole仅用于检测您在单元格“A1”中输入的角色(即“Manager”或“Worker”..所有其他字符串将被忽略并锁定整个工作表)

相关问题