我在使用 C# 代码从 NamesManager 中删除名称时遇到了一些问题。 根据我的要求,我需要从名称管理器中删除所有无效名称。我目前正在检查名称的值,如果值为“#REF!”,则将其删除。这是我正在使用的代码
foreach (Name RangeName in namesManager2)
{
if(RangeName.Value.Contains("#REF!"))
{
RangeName.Delete();
}
}
代码工作正常,但是存在一些奇怪的情况,即存在 2 个具有相同名称但范围不同的名称。 考虑单元格 1 命名为“TESTNAME”,范围为“工作簿”,单元格 2 也命名为“TESTNAME”,范围为“Sheet1”。引用 Cell2 的名称具有有效值。
因此,当我循环使用带有“#REF!”的名称时遇到值上面的代码正在删除两个名称。我想保留具有有效值的名称,但只删除无效的名称。
有人可以建议如何实现这一目标吗?
最佳答案
存在具有重复的本地/全局名称的错误。
在事件工作表具有与该工作表本地名称相同的名称时访问全局名称,将更改本地名称的属性而不是全局名称,即使该名称完全符合工作簿名称也是如此。
所以要绕过这个你必须:
- 检测名称是否重复
- 如果是这样,切换到不是本地名称父级的工作表(当然可能有多个本地名称,每个工作表一个,所以唯一真正安全的方法是添加另一个临时工作表并切换到该工作表)
- 然后在工作簿名称集合或工作表名称集合中访问您想要的任何名称。
这是 JK Pieterse 和我自己开发的免费名称管理器插件使用的技术:
Name manager Download
比内置的名称管理器功能多很多
关于c# - 使用 C# Interop.Excel 从 NamesManager 中删除重复名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18668390/