【问题标题】:VBA protected cells but still allowing editsVBA 受保护的单元格,但仍允许编辑
【发布时间】: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...

标签: excel vba


【解决方案1】:

如果单元格未锁定,则保护工作表不会阻止编辑。

Me.Range(ProtectRange).Locked = True

应该可以解决问题。

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 2010-09-12
    • 2019-03-23
    • 2020-06-29
    • 2016-08-14
    • 1970-01-01
    • 2021-11-30
    • 2020-03-28
    相关资源
    最近更新 更多