Excel 2010 Professional Plus(32 位)似乎创建了一组新的工作表,并重命名了 VBA 屏幕中的所有原始工作表,例如 Sheet10 变为 Sheet101,Sheet13 变为 Sheet131。这导致 UDF 停止运行。“新”的“sheet10”和“sheet13”似乎不存在于 VBA 项目窗口以外的任何地方。“新”工作表旁边有一个蓝色图标。
UDF 确实有效。直到创建这些新工作表并重命名旧工作表。Excel 文件中只有 12 个工作表和一个工作簿。VBAproject 显示 2 个工作簿和 20 个工作表。
1) 是什么原因造成的?
2) 如何修复?
3) 如何预防?
添加显示“sheet3”不存在的属性和真实工作表“sheet31”的属性的图像。所有不存在的工作表和工作簿都有一长串属性。
XLS 文件在此处 您必须下载它,因为它会在谷歌的查看器中打开。
更新:2016 年 1 月 6 日 所以截至今天,当我打开此 XLS 时,其中的公式全都是错误 (#VALUE)。Excel 并未创建我上次更新中看到的不存在的工作表。上周 XLS 和公式正常工作,我没有做任何更改。这是我按照以下帖子中的建议将所有工作表复制到的新工作簿。原始工作簿(图片中显示的带有不存在工作表的工作簿)没有 #VALUE 错误。两个工作簿都在同一台计算机上,并且在过去一个月内一起更新,以便进行比较。
UPDATE3,2016 年 1 月 6 日,我刚刚不小心移动了一个文本单元格,然后点击了“撤消”,所有 #VALUE 错误都消失了,现在我得到了所有正确的计算结果。真是的。
答案1
问题的关键是消息框“自动化错误。灾难性故障”。
目前尚无针对此问题的单一诊断方法,但是它可能......
- 情况1
如果工作簿尝试运行包含未包含在 VBA 编辑器的引用部分中的对象的宏,则可能会发生此类错误。
例如,如果它要求在 PC 上正确注册特定的 DLL。如果这些 DLL 在您的 PC 上,则工作簿没有问题,但在另一台没有 DLL 的 PC 上,就会发生这种情况。
任何项目都将默认包含以下内容:
Visual Basic For Applications
Microsoft Excel x.0 Object Library
OLE Automation
Microsoft Office x.0 Object Library
and possibly if a form has ever been added -
Microsoft Forms 2.0 Object Library
x
Excel 版本在哪里?
在此电脑上运行宏之前,您是否在另一台电脑上打开并修改了该宏?
如果是这样,那么引用已经更新为其他系统的版本,并且在您的系统中找不到它们。
- 案例 2
您的某个 UDF 导致了该问题。重现该问题并检查以黄色突出显示的函数。
根据您发布的图片,问题出在Sumbytext(rg as Range,ltr as String)as Double
。您必须:
- 逐步跟踪 UDF 逻辑以查找可能失败的位置。
- 在命名范围内“List_HolAbbr”始终是值吗?哪个?
- UDF 接收变量的范围
rg
。是否始终是有效范围? - 既然它们使用整数值,为什么
Sumbytest
和MidResult
被定义为 Double?
答案2
我的解决方案与@Scoox 发布的 .xlsb 解决方案类似(谢谢!),但必须对其进行修改,因为我无法更改工作电脑上的宏设置:
- 复制文本文件中的所有宏
- 将损坏的文件另存为 .xlsx 并关闭
- 重新打开文件,另存为 .xlsb 并关闭
- 将所有宏粘贴到 .xlsb 文件中
虽然不理想但对我来说有用!
答案3
SuMau 的解决方案对我来说很有用,尽管我必须添加一个额外的步骤:如果您的 VBAProject 使用任何非默认引用,您也需要恢复这些引用。
为了更容易找到它们,请将原始工作簿与已转换为 xlsx 文件的工作簿一起打开。这样,当您从 VBA 菜单中选择“工具 -> 引用”时,您要添加的所有引用都将列在列表顶部已选中的引用的正下方。
当打开两个文件时,您还可以将任何代码模块从旧文件拖到要修补的文件中。这样您就可以轻松移植不在工作表或工作簿对象上的所有 VBA 代码。
答案4
我遇到了同样的问题,但可以解决。使用信息部分中的问题检查器。这将帮助您删除不可见的对象。