【问题标题】:How to lock (make read-only) a specific range based on a cell value?如何根据单元格值锁定(只读)特定范围?
【发布时间】:2019-10-16 13:42:30
【问题描述】:

我正在开发一种计划监控工具。我需要根据单元格值锁定一系列单元格。

我希望当“Q”列中的值为“已确认”时,从 M 列到 Q 列的同一行中的单元格被锁定。

Sub planning_blocker()

    Dim last_row As Integer

    ' Compute the last row
    last_row = Worksheets("Planning").Cells(Rows.Count, 1).End(xlUp).Row
    Debug.Print last_row

    For i = 3 To last_row

        If Worksheets("Planning").Cells(i, 17).Value = "" Then
            Sheets("Planning").Range("M" & i & ":" & "P" & i).Locked = False
        
        Else
            Sheets("Planning").Range("M" & i & ":" & "P" & i).Locked = True
    
        End If
    
    Next i

    Sheets("Planning").Protect Password:="User"

End Sub

这部分是因为:

  • 它锁定检测到“已确认”的整个行,而不仅仅是范围
  • 它只考虑检测到“已确认”的第一行,而不考虑其余行(如果多行标记为“已确认”,则仅阻止第一行)。

【问题讨论】:

    标签: excel vba cell


    【解决方案1】:

    我测试了您的代码,它适用于我 (Excel2016)。如果当前行的第 17 列 (col Q) 不为空,则范围 (M:P) 将被锁定。不要不知道这可能是您的问题...

    【讨论】:

      【解决方案2】:

      好吧,如果您需要查看 status 列的变化,我建议您使用Sub Worksheet_Change。每当您的工作表发生变化时,这都会触发您的代码。

      我做了一些更改以适应您的代码,结果如下:

      Sub Worksheet_Change(ByVal target As Range)
          Dim intesection As Range
          Dim rowIndex As Integer
          Set intesection = Intersect(target, Range("Q:Q"))
      
          'watch changes in intersection (column Q)
          If Not intesection Is Nothing Then
              'get row index of changed status
              rowIndex = Range(intesection.Address(0, 0)).Row
      
              If Cells(rowIndex, 17).Value = "" Then
                  'unlock if status is blank
                  ActiveSheet.Range("M" & rowIndex & ":" & "P" & rowIndex).Locked = False
                  Call ActiveSheet.Protect(UserInterfaceOnly:=True, Password:="User")
      
              Else
                  'lock if not blank
                  ActiveSheet.Range("M" & rowIndex & ":" & "P" & rowIndex).Locked = True
                  Call ActiveSheet.Protect(UserInterfaceOnly:=True, Password:="User")
              End If
          End If
      
      End Sub
      

      您需要将其添加到sheet 中,您拥有要锁定/解锁的表。

      类似这样的:

      来源:

      How to Lock the data in a cell

      How to Tell if a Cell Changed

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        • 1970-01-01
        • 2020-07-01
        • 2015-12-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多