当尝试设置Range对象的 Locked 属性时,遇到了所有运行时错误1004,“无法设置Range类的Locked属性”。代码如下:

that_goddamn_sheet.Unprotect

; Determine if we should proceed

that_goddamn_range.Locked = True

; Do more stuff

that_goddamn_sheet.Protect

当我在行上设置一个断点并尝试从“即时”窗口中查询that_goddamn_range.Locked的值时,这可以正常工作,但是设置失败。

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

可能出了什么问题?

最佳答案

这里是完整的解释:

通常,导致此错误的原因有两种:尝试更改 protected 工作表上单元格的 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属性之前先取消合并范围,然后再重新合并,但是我从未见过以上两种解决方案之一还不够(而且很多)的情况。清洁工)。
  • 关于excel - 设置Range.Locked时出现错误1004,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9184818/

    10-12 03:48