问题描述
我有一本工作簿,昨天下午保存下来,并且工作正常。我今天早上已经打开它,并且VBE中的所有模块都没有“找到”。从视觉上我可以看到他们都坐在那里。
当尝试打开这些模块中的任何一个以编辑代码时,窗口将变为灰色,如下所示。
有人知道a)为什么会这样,b)我该如何解决?
我以为最初是Excel的实例,所以重新启动了PC。
感谢您的帮助!
解决方法
我设法找到了解决此问题的方法,因此在其他人遇到类似问题的情况下共享解决方案。
VBA项目似乎已损坏。在下面,找到一些建议和解决方法,以期将来解决类似问题。
- 这对我有用。 将
.xlsm
文件转换为.xls
文件。您可以通过在重命名文件时更改文件扩展名来做到这一点。 - 您还可以尝试将文件类型转换为
.zip
,然后再转换回.xlsm
。注意:以防万一,请转换您原件的副本。
其他建议(如Chris Nelisen所建议的)是:
- 定期导出VBA模块
- 在构建时保存不同的版本
我将我的 .xslm
文件从我的 PC 复制到我的 OneDrive 帐户。
我在 iPad OneDrive 帐户上打开文件,然后导出到 Excel for iOS。该文件打开并说链接和宏已禁用。然后我将文件的副本保存回 OneDrive 帐户。我回到我的电脑并从 OneDrive 打开文件。我重新建立了链接。
宏来自备份。如果您不备份宏,这是一个问题。
,这是一个经过充分描述的问题,它与我刚刚经历的事情完全吻合(甚至包括我最近没有进行过版本控制的事实)。
我的文件有一个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 <> ""
会在遇到损坏的模块时阻止它出错,但是由于“已修复”文件中没有损坏的模块,因此没有必要。
由于导出例程是如此之快(40个模块/ 100kb在
,我的解决方法,完美运行:
- 以安全模式打开 Excel(在启动时按住 Ctrl 程序,或使用 /safe 开关 (excel.exe /safe) 从命令行启动程序)
- 打开损坏的工作簿(从安全模式,文件->打开->导航)
- 如果询问,请不要启用宏
- 确保存在宏 (Alt+F11) - 不需要
- 另存为新工作簿
- 关闭安全模式excel
- 照常打开保存的工作簿
你在 OneDrive 上有这个文件吗?
如果是,我遇到了这个问题,并解决了恢复上次保存的问题。如果您打开 OneDrive 站点 (onedrive.live.com),找到该文件,然后选择版本历史记录。下载倒数第二个。