尝试删除命名范围时VBA 400错误

时间:2018-03-31 09:01:57

标签: vba excel-vba named-ranges excel

我想删除工作簿中的所有全局命名范围。 我有这段代码:

Dim xName As Name
For Each xName In Application.ActiveWorkbook.Names
    If InStr(xName.Name, "!") = 0 Then xName.Delete
Next

即使我更改代码以删除所有命名范围,我仍然会得到相同的错误。

Dim xName As Name
For Each xName In Application.ActiveWorkbook.Names
    xName.Delete
Next

当我运行它时,只删除第一个命名范围,然后抛出400错误。它不会继续下一个。

是否存在我缺少的某种附加设置或设置?这段代码看起来很简单,但是我无法让它工作。

2 个答案:

答案 0 :(得分:0)

好的,经过长时间的聊天和一些反复试验,我发现了问题。 它实际上是双重的。

这段代码不起作用的原因似乎是因为它找到的第一个命名范围是Excel内置范围,显然无法删除。 两个代码片段都是这种情况

Dim xName As Name
For Each xName In Application.ActiveWorkbook.Names
    xName.Delete
Next

Dim xName As Name
For Each xName In Application.ActiveWorkbook.Names
    If InStr(xName.Name, "!") = 0 Then xName.Delete
Next

因为这两个都找到了内置的命名范围" _xlfn.CONCAT"并尝试删除它。

我终于听从了@ QHarr的建议,并使用了不同的限定词。幸运的是,工作簿范围内的所有命名范围都包含了#34; Master"在名字中,所以很容易。

所以,最终解决方案:

Dim xName As Name
For Each xName In Application.ActiveWorkbook.Names
    If InStr(xName.Name, "Master") > 0 Then xName.Delete
Next

Thanx家伙!

答案 1 :(得分:0)

简单的解决方案是检查指定范围的第一个字符。特殊范围以" _"开头。 (下划线)。

我解决这个问题的方法是一个简单的检查。并向后工作。

Dim xName As Name
Dim xNum as Long
For XNum = Application.ActiveWorkbook.Names.Count To 1 Step -1
    Set XName = Application.ActiveWorkbook.Names(XNum)
    If InStr(xName.Name, "!") = 0 And Left(XName.Name <> "_", 1) Then xName.Delete
Next

在我的情况下,我删除了所有名称,因此不需要InStr(xName.Name, "!") = 0 And,但这非常相似。