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

VBA 400 Error when trying to Delete a Named Range

我想删除工作簿中的所有全局命名区域。 我有这个代码:

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 错误。它不会移动到下一个。

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

好的,经过长时间的交谈和反复试验,我找到了问题所在。 实际上是 two-fold.

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

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

因为这两个发现 built-in 命名范围“_xlfn.CONCAT”并尝试删除它。

我终于听从了@QHarr 的建议并使用了不同的限定符。幸运的是,我在工作簿范围中的所有命名范围的名称中都有 "Master",所以这很容易。

所以,最终的解决方案:

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

谢谢你们!

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

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

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 但这非常相似。