我要删除工作簿中的所有全局命名范围。我有这个代码:
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条答案
按热度按时间dffbzjpn1#
好的,经过长时间的交谈和一些尝试和错误,我找到了问题所在。实际上是双重的。
这段代码不起作用的原因,似乎是因为它找到的第一个命名范围是一个Excel内置的范围,显然无法删除。这两个代码段都是如此
与
因为这两个函数都找到了内置的命名范围“_xlfn.CONCAT”并试图删除它。
我最终听从了@QHarr的建议,使用了不同的限定词。幸运的是,我在工作簿范围中的所有命名范围的名称中都有“Master”,所以很容易。
因此,最终解决方案:
Thanx伙计们!
wz3gfoph2#
简单的解决方案是检查命名范围的第一个字符。特殊范围以“_”(下划线)开头。
我解决这个问题的方法是一个简单的检查。倒着工作。
在我的例子中,我删除了所有的名字,所以不需要
InStr(xName.Name, "!") = 0 And
,但这是非常相似的。