根据另一个单元格的值锁定某些单元格

时间:2018-06-11 12:30:34

标签: excel vba excel-vba

我希望根据来自一行数据下拉的输入来锁定特定范围的单元格?

例如,在每一行中,第三个单元格都会问一个问题 - "是"或"否"通过下拉列表给出。如果用户选择" NO",则必须锁定剩余的三个单元格。但是,如果用户选择"是",则剩余的单元格仍可用于输入数据。

protected void Page_Load(object sender, EventArgs e)
    {
        if ((Boolean)Session["CheckRefresh"] is true)
        {
            Session["CheckRefresh"] = null;
            Response.Write("Page was refreshed");
        }
        else
        { }
    }
    protected void Page_PreInit(object sender, EventArgs e)
    {
        Session["CheckRefresh"] = Session["CheckRefresh"] is null ? false : true;
    }

喜欢D2到F2必须锁定,而D3到F3应该可以进入,再次D4到F4被锁定等等......

我尝试了下面的代码,但它没有锁定单元格,或者没有像我观察到的那样做任何操作

   A         B          C            D         E         F  
| S.No   |  ID    |  Response   |  TIme  |  Value  | Expense | 
| 1      |  12345 |  NO         |  ----  |  ----   |  ----   |  (Locked Cells)
| 2      |  67y45 |  YES        |  44    |  1.68   |    1500 |  (UnLocked Cells)
| 3      |  12456 |  NO         |  ----  |  ----   |  ----   |  (Locked Cells)

取得 160 作为最高范围。

任何帮助都会非常有用,谢谢。

1 个答案:

答案 0 :(得分:2)

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Range("C2:C160")) Is Nothing Then Exit Sub
    If Target.Cells.Count > 1 Then Exit Sub

    Me.Unprotect Password:="password"

    If Target = "YES" Then            
        Target.Offset(0,1).Resize(1,3).Locked = False
    ElseIf Target = "NO" Then
        Target.Offset(0,1).Resize(1,3).Locked = True        
    End If

    Me.Protect Password:="password"

End Sub

我们的想法是检查Target值。它是细胞,它被改变了。因此,您可以从Intersect()开始,检查更改后的单元格是否在Range("C2:C160")中:

If Not Intersect(Target, Range("C2:C160")) Then Exit Sub

然后尝试查看更改的单元格是否超过1:

If Target.Cells.Count > 1 Then Exit Sub

最后,基于"YES"和" NO"你可以给锁定单元格。您可以考虑使用UCase(),以使您的代码适用于"是"以及#34;

If UCase(Target) = "YES" Then
...
ElseIf UCase(Target) = "NO" Then

关于锁定和解锁的单元格以及是否可以选择它们,请参阅此文章,这些属性说得很清楚:

https://support.office.com/en-us/article/lock-or-unlock-specific-areas-of-a-protected-worksheet-75481b72-db8a-4267-8c43-042a5f2cd93a