我正在使用计划监视工具,因此我需要根据条件(更准确地说:基于像元值)锁定一定范围的像元。
这里是示例:我想获得的是,当列“ Q”中的值是“ Confirmed”时,则锁定从列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
之所以起作用,部分原因是:-它锁定了检测到“已确认”的整个行,而不仅仅是范围-它仅考虑检测到“已确认”的第一行,而不考虑其余的行(如果我有多行标记为“已确认”的行,则仅阻止第一行)。
我是VBA的初学者,所以我真的不知道错误在哪里。
感谢您的帮助!
我测试了您的代码,它对我有用(Excel2016)。如果当前行的第17列(列Q)不为空,则范围(M:P)被锁定。不要不,这可能是您的问题...