我希望根据来自一行数据下拉的输入来锁定特定范围的单元格?
例如,在每一行中,第三个单元格都会问一个问题 - "是"或"否"通过下拉列表给出。如果用户选择" 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 作为最高范围。
任何帮助都会非常有用,谢谢。
答案 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
关于锁定和解锁的单元格以及是否可以选择它们,请参阅此文章,这些属性说得很清楚: