损坏的 VBA 找不到项目模块错误

Corrupt VBA Project Module Not Found Error

我有一个昨天下午保存的工作簿,并且运行良好。我今天早上打开了,VBE里面的模块有none个是'found'。从视觉上我可以看到他们都坐在那里。

当试图打开任何这些模块来编辑代码时,windows 显示为灰色,如下所示。

当我尝试导出代码模块时,出现 'Module Not Found' 错误。

有谁知道 a) 为什么会这样,b) 我该如何解决?

我一开始以为是我的实例Excel,所以重启了电脑。

感谢任何帮助!

我设法找到了解决此问题的方法,因此在其他人遇到类似问题时分享解决方案。

VBA 项目似乎以某种方式损坏了。在下面找到一些建议和变通方法,以便将来尝试解决类似问题。

  1. 这对我有用。 .xlsm 文件转换为 .xls 文件。您可以通过在重命名文件时更改文件扩展名来实现。
  2. 您也可以尝试转换为 .zip 文件类型,然后再转换回 .xlsm。注意:以防万一,请转换原件的副本。

其他建议(正如 Chris Nelisen 所建议的)是:

  • 定期导出您的 VBA 模块
  • 在构建时保存不同的版本

这是一个描述得很好的问题,它完全符合我刚刚遇到的情况(甚至包括我最近没有进行版本控制的事实)。

我的文件有一个 xlsb 后缀。使用不同的后缀重新保存在同一台 PC 上对我不起作用,但我将文件通过电子邮件发送到另一台 PC,打开它,另存为 xlsm,将其发送回原始机器,现在它又可以正常工作了。我什至可以用我喜欢的 xlsb 后缀重新保存,它仍然有效。

我还运行这个脚本来备份我的模块:

Sub ExportVbaModules()
     
'Acknowledgements to Andy Pope [ozgrid thread 60787]
     
    Dim objMyProj As VBProject 'if error, go to VBA editor - tools - References - Microsoft Visual Basic-Extensibility5.3
    Dim objVBComp As VBComponent
     
    Set objMyProj = Application.ActiveWorkbook.VBProject
     
    For Each objVBComp In objMyProj.VBComponents
        If objVBComp.Type = vbext_ct_StdModule And objVBComp.Name <> "" Then
            objVBComp.Export "C:\Users\MyName\VbaBackups\" & objVBComp.Name & ".txt"
        End If
    Next

End Sub

And objVBComp.Name <> "" 阻止它在遇到损坏的模块时出错,但由于 'fixed' 文件不包含损坏的模块,结果证明不需要。

由于导出例程如此之快(40 个模块/100kb 在 <1 秒内保存)我将把它分配给功能区上的一个按钮,为它创建的文件提供更好的命名约定。

我将我的 .xslm 文件从我的 PC 复制到我的 OneDrive 帐户。

我在我的 iPad OneDrive 帐户上打开文件,然后导出到 Excel 用于 iOS。该文件打开并显示链接和宏已禁用。然后,我将该文件的副本保存回 OneDrive 帐户。我返回我的电脑并打开 OneDrive 中的文件。我重新建立链接。

宏来自备份。如果您不备份您的宏,就会出现这个问题。

你在 OneDrive 上有这个文件吗?

如果是,我正面临这个问题,并解决了恢复上次保存的问题。如果您打开 OneDrive 站点 (onedrive.live.com),找到该文件和 select 版本历史记录。下载倒数第二个。

我的解决方法非常有效:

  1. 在安全模式下打开 Excel(启动时按住 Ctrl 程序,或者在您使用 /safe 开关 (excel.exe /safe) 时 从命令行启动程序)
  2. 打开损坏的工作簿(从安全模式,文件->打开->导航)
  3. 如果询问则不要启用宏
  4. 确保宏存在 (Alt+F11) - 不需要
  5. 另存为新工作簿
  6. 关闭安全模式excel
  7. 照常打开保存的工作簿