【发布时间】:2019-07-15 23:03:52
【问题描述】:
我有一个 python 脚本可以编辑某个列的内容,而 VBA 可以检查该列是否已更改。当它检测到更改时,它会锁定该列以防止用户编辑。它成功地保护了工作表,但仍然可以编辑单元格。我不明白为什么会这样。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Protect As String
Dim NotProtectRange As String
ProtectRange = "A1:A1049576"
NotProtectRange = "B1:XFD1048576"
If Not Intersect(Target, Target.Worksheet.Range(ProtectRange)) Is Nothing Then
Worksheets("Sheet1").Unprotect
Range(NotProtectRange).Locked = False
Worksheets("Sheet1").Protect UserInterfaceOnly:=True, Contents:=True
End If
End Sub
我希望当我双击ProtectRange 范围内的单元格时,我应该无法编辑它们。但相反,我可以编辑它们。那么我该如何解决呢?
【问题讨论】:
-
如果单元格未锁定,则保护工作表不会阻止编辑。
ProtectRange中的单元格是否被锁定? -
在工作表代码模块中仅供参考,您可以使用(例如)
Me.Unprotect代替(例如)Worksheets("Sheet1").Unprotect -
@TimWilliams 感谢您澄清这一点。我使用 Range(ProtectRange).Locked = True 解决了这个问题。我最初的印象是,保护工作表会锁定除 NotProtectRange 中的单元格之外的所有单元格。
-
单元格的
Locked属性的默认状态是True,因此您可能在之前的某个时间点将其设置为 False...