【问题标题】:How to lock cells dynamically, based on cell value on that row? [closed]如何根据该行上的单元格值动态锁定单元格? [关闭]
【发布时间】:2014-01-07 11:14:28
【问题描述】:

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

如果选择了“PP”,它将变成深灰色。

如果从B7:B1000 的任何位置的下拉列表中选择“PP”,我现在想锁定单元格F7:M1000。我不希望任何人能够输入F7:M1000。我是 VBA 的初学者,所以如果可以通过 VBA 完成,那么简单的说明将帮助我做到这一点。

【问题讨论】:

  • 你搜索过谷歌吗?您尝试录制宏吗?
  • this 部分涵盖了您的问题的答案

标签: vba excel excel-2010


【解决方案1】:

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

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

然后在Sheet模块中添加这个:

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

【讨论】:

  • 那行不通。无论我是否选择了 PP,它都会以灰色突出显示 B7:M1000 中的所有单元格。此外,由于电子表格受到保护,我什至无法从下拉列表中选择 PP,因为它告诉我它是受保护的。在 B7:B1000 中,我设置了一个数据验证,以便能够使用下拉菜单。您只能选择 PP 或 SW,但我希望单元格 F7:M1000 在选择 PP 时锁定,并且只有该行变为灰色。例如:如果 B7 与 PP 一起选择,那么我需要单元格 F7:M7 锁定并变为灰色。在整张纸上使用相同的方法。如果 B7 为空白或有 SW,则什么也不做。
  • 好的,所以这个答案并不完全符合您的要求。下一步你要怎么做。您是否尝试过修改它以满足您的确切需求?因为这个答案确实为您指明了正确的方向。
  • 我是 VBA 的完全初学者,只是阅读代码令人困惑。它仍在锁定整个工作表,A 到 E 列也应始终处于解锁状态,但它们也处于锁定状态。
  • 如果 B7:B1000 是 PP,我想要一个仅锁定 F7:M1000 的代码。这没有回答问题。上面的反应是锁定整张纸,这不是我想要的。
  • 它的工作!我已经在这几个星期了。我解锁了单元格 A 到 E,然后应用了您的代码。它现在正在做它的工作。你的回答很中肯。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-11
  • 1970-01-01
  • 1970-01-01
  • 2019-06-16
相关资源
最近更新 更多