我试图在某些条件下删除某些命名范围的所有内容。具体来说,如果范围的名称以" CA"结尾,则应清除组成该范围的单元格中的所有内容。这就是我到目前为止所做的:
For Each Nm in ActiveWorkbook.Names
If Right(Nm.Name, 2) = "CA" Then
Range(Nm.Name).ClearContents
End If
Next Nm
这会产生错误:
Method 'Range' of object '_Global' failed
我还尝试取消.Name
并使用:
Range(Nm).ClearContents
但是这会产生同样的错误。提供某种工作簿和工作表引用会产生错误:
Application-defined or object-defined error
将.ClearContents
更改为.Clear
不会做任何事情。
我知道它已找到范围,因为它已通过if-statement
。
我错过了一些愚蠢的事吗?
编辑:对于它的价值,所讨论的命名区域位于另一个编写代码的工作簿中,该代码以兼容模式打开。
答案 0 :(得分:2)
所以,我无法确定为什么会发生这种情况,因为我获得命名范围的工作簿不是我创建的,但它看起来好像是" RefersTo"对于有问题的指定范围,需要删除额外的引号,以便引用合法范围。见下文
所以我添加的代码没有替换引号,这似乎解决了这个问题。
For Each Nm In Names
If Right(Nm.Name, 2) = "CA" Then
newName = Replace(CStr(Nm), Chr(34), "")
Range(newName).ClearContents
End If
Next Nm
我知道很多人一直在看这个,我很感激。谢谢。
答案 1 :(得分:0)
这对我有用:
Dim nm As Name
For Each nm In Names
If LCase(Right(nm.Name, 2)) = "ca" Then
Range(nm).ClearContents
End If
Next nm