使用 Excel VBA 损坏文件删除命名范围

Posted

技术标签:

【中文标题】使用 Excel VBA 损坏文件删除命名范围【英文标题】:Deleting Named Ranges with Excel VBA Corrupting File 【发布时间】:2020-03-04 16:14:29 【问题描述】:

我遇到的情况是,只要我运行以下代码行,我的文件就会在关闭并重新打开时损坏。

Dim MyName As Name
For Each MyName In Names
    ActiveWorkbook.Names(MyName.Name).Delete
Next

我也试过用下面的代码替换上面的代码,得到了同样的效果:

Do While CBool(ActiveWorkbook.Names.Count)
    ActiveWorkbook.Names(1).Delete
Loop

重新打开文件时的错误如下: “我们发现 '文件 X.xlsm' 中的某些内容存在问题。您希望我们尽可能多地恢复吗?如果您信任此工作簿的来源,请单击“是”。

在此之后,文件通过“修复或删除不可读的内容”来修复文件,并显示消息“已删除功能:来自 /xl/worksheets/sheet7.xml 部分的外部数据范围”

有什么想法吗?我很高兴我能够隔离导致问题的代码,但我不知所措。我正在使用 Excel for Office 365 MSO 32 位。

【问题讨论】:

听起来您的工作簿中有一个外部数据查询,这将创建一个隐藏名称。顺便说一句,将使用 2007 年或更高版本引入的任何功能,所以我建议您的代码需要调整以处理此类事情。 【参考方案1】:

您没有定义Names 所属的集合。尝试修改以定义名称集合。

Dim MyName As Name
For Each MyName In ActiveWorkbook.Names
    MyName.Delete
Next

【讨论】:

以上是关于使用 Excel VBA 损坏文件删除命名范围的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA Saveas 函数损坏文件

在 VBA Excel 2007 中使用命名范围

Excel公式中的VBA命名范围

将命名范围值分配给变量(Excel VBA) - 新手

使用 Excel VBA 重命名文件

Excel VBA - 组合宏以重命名工作表和宏以在一个宏中合并工作表