Workbook.SaveAs 使 Excel 与某些工作簿而非其他工作簿一起崩溃

Posted

技术标签:

【中文标题】Workbook.SaveAs 使 Excel 与某些工作簿而非其他工作簿一起崩溃【英文标题】:Workbook.SaveAs crashes Excel with some workbooks but not others 【发布时间】:2014-01-08 18:37:11 【问题描述】:

我有一个宏,它对工作簿进行一些更改,然后将该工作簿以不同的文件名保存在不同的文件夹中。保存工作簿的代码是:

ActiveWorkbook.SaveAs sPass & "\" & sFile

一些工作簿可以正确保存,而另一些工作簿会导致 Excel 崩溃并显示消息

Microsoft Excel has stopped working

对于以编程方式保存时崩溃的工作簿,如果我在 SaveAs 之前退出程序并手动将它们保存在 SaveAs 将使用的相同文件名下,它们将毫无问题地保存。

我试过按索引引用工作簿,如下:

Workbooks(workbookName).SaveAs sPass & "\" & sFile

还尝试使用虚拟文件名:

Workbooks(workbookName).SaveAs "U:\someOtherDir\xyz.xlsm"

我也试过用EnableEvents 禁用包围SaveAs

Application.EnableEvents=False
ActiveWorkbook.SaveAs sPass & "\" & sFile
Application.EnableEvents=True

但某些工作簿仍然会发生崩溃。我还没有找到关于哪些工作簿失败的模式。它们正确打开,即它们没有损坏。

【问题讨论】:

当你说“崩溃”时,究竟发生了什么?进程崩溃时 Excel 消失的任何错误消息或只是完全静默失败? 我得到一个弹出窗口,上面写着Microsoft Excel has stopped working,然后单击该弹出窗口后,所有 Excel 实例都将关闭。 对于行为不端的工作簿,您是否尝试过将数据移动到新工作簿然后测试宏?是否有可能发生某些文件损坏? @AlanWaage,我试试看。 @AlanWaage,将数据复制到新工作簿避免了崩溃。所以可能是文件损坏问题。但奇怪的是“损坏”文件成功打开,没有提示需要修复它。 【参考方案1】:

还要做一个正确的.SaveAs,使用这个。这指定了正确的FileFormat。这将确保文件以正确的文件格式保存,并避免之后手动打开文件时出现的错误消息。

'
'~~~> Rest of the code
'
sFile = "U:\someOtherDir\xyz.xlsm"
Workbooks(workbookName).SaveAs sFile, 52
DoEvents
'
'~~~> Rest of the code
'

【讨论】:

这并没有解决问题;我仍然收到Microsoft Excel has stopped working 消息的崩溃。

以上是关于Workbook.SaveAs 使 Excel 与某些工作簿而非其他工作簿一起崩溃的主要内容,如果未能解决你的问题,请参考以下文章

如何使用自动覆盖的workbook.saveas

我用delphi保存excel文件之后,不能正常打开,显示“您打开的文件格式与扩展名指定的格式不一致,。。。”

Workbook.SaveAs() 到 Office 2011 for Mac 中的不同文件夹

保存操作失败时如何捕获网络上的哪个用户打开了文件?

excel表格中怎样使文字居中

怎样使excel文字居中 excel文字居中操作方法介绍