Vba 如何根据该行上的单元格值动态锁定单元格?

Vba 如何根据该行上的单元格值动态锁定单元格?,vba,excel,excel-2010,Vba,Excel,Excel 2010,我做了一个简单的条件格式化 =$B7=“PP”适用于=$F$7:$M$1000 如果选择了“PP”,则将变为深灰色 如果从B7:B1000中的下拉列表中选择了“PP”,我现在想锁定单元格F7:M1000。我不希望任何人能够键入F7:M1000。我是VBA的完全初学者,因此如果可以通过VBA完成,那么简单的说明将帮助我完成此操作。首先,解锁单元格B7:B1000。您希望用户始终能够编辑这些内容 然后保护床单。这将确保无法编辑锁定的单元格。(如果工作表未受保护,则锁定或未锁定单元格没有区别。) 然后

我做了一个简单的条件格式化
=$B7=“PP”
适用于
=$F$7:$M$1000

如果选择了“PP”,则将变为深灰色


如果从
B7:B1000
中的下拉列表中选择了“PP”,我现在想锁定单元格
F7:M1000
。我不希望任何人能够键入
F7:M1000
。我是VBA的完全初学者,因此如果可以通过VBA完成,那么简单的说明将帮助我完成此操作。

首先,解锁单元格B7:B1000。您希望用户始终能够编辑这些内容

然后保护床单。这将确保无法编辑锁定的单元格。(如果工作表未受保护,则锁定或未锁定单元格没有区别。)

然后将其添加到图纸模块中:

Private Sub Worksheet_Change(ByVal Target As Range)

    On Error GoTo ErrorHandler
    Application.EnableEvents = False 'prevent infinite event loops

    Me.Unprotect ' else won't be able to modify locked cells

    If Not Intersect(Target, Range("B7:B1000")) Is Nothing Then
        'User edited a cell in this range.
        With Range("F1:M1").Offset(Target.Row - 1, 0)
            If Target.Value = "PP" Then
                .Interior.Color = RGB(200, 200, 200) 'gray
                .Locked = True
            Else
                .Interior.Color = RGB(255, 255, 255) 'white
                .Locked = False
            End If
        End With
    End If

ExitProcedure:
    Me.Protect
    Application.EnableEvents = True
    Exit Sub
ErrorHandler:
    MsgBox Err.Description 
    Resume ExitProcedure

End Sub

你搜索过谷歌吗?你试过录制宏吗?部分涵盖了对您的问题的回答,但该回答不起作用。它以灰色突出显示B7:M1000中的所有单元格,无论我是否选择了PP。此外,由于电子表格受保护,我甚至无法从下拉列表中选择PP,因为它告诉我其受保护。在B7:B1000中,我设置了一个数据验证,以便能够使用下拉列表。您只能选择PP或SW,但我希望单元格F7:M1000在选择PP时锁定,并且仅该行变为灰色。示例:如果使用PP选择B7,则我需要单元格F7:M7锁定并变为灰色。在整个工作表中使用相同的方法。如果B7是空的或者有SW,那么什么也不做。好的,所以这个答案并不完全符合你的要求。你下一步做什么。您是否尝试过修改它以满足您的确切需求?因为这个答案确实为您指明了正确的方向。我是VBA的完全初学者,仅仅阅读代码就令人困惑。它仍在锁定整个工作表,A列到E列也应始终解锁,但它们也在锁定。我想要一个代码,如果B7:B1000是PP,则只锁定F7:M1000。这并不能回答问题。上面的反应是锁定整个工作表,这不是我想要的。它的工作!我已经做了好几个星期了。我解锁了A到E单元格,然后应用了您的代码。它现在正在做它的工作。你的回答完全正确。非常感谢。