如何删除命名范围的内容

时间:2015-10-23 12:15:00

标签: excel excel-vba vba

我试图在某些条件下删除某些命名范围的所有内容。具体来说,如果范围的名称以" 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

我错过了一些愚蠢的事吗?

编辑:对于它的价值,所讨论的命名区域位于另一个编写代码的工作簿中,该代码以兼容模式打开。

2 个答案:

答案 0 :(得分:2)

所以,我无法确定为什么会发生这种情况,因为我获得命名范围的工作簿不是我创建的,但它看起来好像是" RefersTo"对于有问题的指定范围,需要删除额外的引号,以便引用合法范围。见下文

enter image description here

所以我添加的代码没有替换引号,这似乎解决了这个问题。

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