【问题标题】:VBA for Excel: Unlock cells in protected sheet, while allowing VBA to edit themVBA for Excel:解锁受保护工作表中的单元格,同时允许 VBA 编辑它们
【发布时间】:2025-11-24 10:00:02
【问题描述】:

我有一个受保护的工作表(“练习选择”),所有单元格都被锁定,除了两个。

我们假设只有个未锁定的单元格是 A1 和 A2,它们被合并了。

我想要做的是,当单元格 A1 和 A2 的值为“Plank (achieved)”时(您可以写,因为它已解锁),那么单元格 B1 和 B2(也已合并)将被解锁.现在您已经解锁了四个单元格。如果您在单元格 A1 和 A2 中写入“Plank (achieved)”以外的内容,则单元格 B1 和 B2 仍将被锁定,直到您正确写入并运行宏。

有什么办法吗?该宏名为“UnlockPushup”。请注意,在我写的标题中仍然允许 VBA 编辑它们,因为如果“Plank (achieved)”的值发生更改,新解锁的单元格将被锁定。

我有这个宏,但我没有测试过它,我认为它不会工作。有enter code hereideas 吗?

    Sub UnlockPushup
       If Worksheets("Exercise Selection").Range("A1:A2").Value >= "Plank (achieved)" Then
             ActiveSheet.Unprotect Password:="hardestpassword"
             Worksheets("Exercise Selection").Range("B1:B2").Locked = False
             ActiveSheet.Protect Password:="hardestpassword"
          Else
             ActiveSheet.Unprotect Password:="hardestpassword"
             Worksheets("Exercise Selection").Range("B1:B2").Locked = True
             ActiveSheet.Protect Password:="hardestpassword"
       End If
    End Sub

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    请参阅SO post 中的解决方案,您可以将 UserInterfaceOnly 添加到 Protect 方法中,这样它就允许 VBA 在不取消保护的情况下更改值。

    要使解决方案有效,您需要将所有调用.Protect 方法的代码更改为具有参数UserInterfaceOnly:=True

    例如 Activesheet.Protect "hardestpassword", UserInterfaceOnly:=True

    一旦使用此参数保护工作表,就可以在 VBA 宏中更改单元格值,而无需调用 .Unprotect

    【讨论】:

    • 谢谢。那么宏呢?
    • @alej27 您可能需要对调用.Protect 的现有宏进行大量更改。您最好创建一个单独的通用 Sub 来保护工作表。例如将工作表名称传递给该 Sub。