设置Range.Locked时出现错误1004

bad*_*adp 8 excel vba

我得到了catch-all运行时错误1004,"无法设置Range类的Locked属性",好吧,试图设置LockedRange对象的属性.代码如下所示:

that_goddamn_sheet.Unprotect

; Determine if we should proceed

that_goddamn_range.Locked = True

; Do more stuff

that_goddamn_sheet.Protect
Run Code Online (Sandbox Code Playgroud)

当我在该行上设置断点并尝试that_goddamn_range.Locked从立即窗口查询值时,这没有问题,但设置失败.

但是,如果我运行that_goddamn_range.Select,打破宏,取消保护工作表(它会在选择更改时自动重新保护)然后右键单击,选择属性,切换到保护选项卡并勾选锁定然后确认,然而事情正常.

什么可能出错?

pst*_*ton 16

这是一个完整的解释:

通常,此错误有两个原因:尝试更改受保护工作表上的单元格的Locked属性和/或尝试更改合并范围内单个单元格的Locked属性.

在第一种情况下,您可以解锁工作表或为其设置UserInterfaceOnly保护,强烈建议您使用,因为您不必反复解锁/锁定它.

对于合并的单元格,您无法锁定属于合并范围的单个单元格,但有合理的选项:

  • 如果您使用单元格地址表示法来引用单元格/范围,

    Range("A1").Locked = True

    然后引用整个合并范围:

    Range("A1:A3").Locked = True 'where "A1:A3" is the entire merged range

  • 如果对一组合并单元格使用命名范围,则默认情况下,它将被定义为仅引用第一个合并单元格.您可以编辑其定义以包括整个合并范围,也可以使用其MergeArea属性来引用其关联的合并范围:

    Range(“SomeNamedRange”).MergeArea.Locked = True

    但请注意,您不能同时执行这两个操作,因为显然,MergeArea属性未定义为不是较大合并区域的严格子的范围!

  • 当然,您可以在设置包含单元格的Locked属性之前取消合并范围,然后重新合并它,但我从未见过上述两种解决方案中的一种不够充分的情况(更清洁) ).


bad*_*adp 3

[工作表] 在选择更改时自动重新保护

由于某种原因,这张纸在过程中重新保护了自己。在设置属性之前再次取消保护Locked解决了我的问题。

实际上,我需要连续锁定多个范围,并且必须在每次属性更改之前取消对工作表的保护。