Excel 崩溃,VBA 用户窗体无法保存
Posted
技术标签:
【中文标题】Excel 崩溃,VBA 用户窗体无法保存【英文标题】:Excel crashes, VBA userform cannot save 【发布时间】:2013-04-05 11:19:25 【问题描述】:我在 Excel 中有一个用户表单,用户在其中输入信息,然后点击“添加库存”按钮。按下此按钮后,信息将输入到电子表格中,然后使用“ActiveWorkbook.Save”保存电子表格。
问题是工作计算机很旧,Excel 容易崩溃。当电子表格被自动恢复时,添加库存功能不再起作用,它会因代码 75 错误而崩溃。在这种情况下,ActiveWorkbook.Save 似乎不起作用,直到用户手动点击 CTRL-S。老板坚持认为我们的用户对计算机不够精通,无法管理这个问题,所以我需要以某种方式检查 Excel 是否崩溃,如果是,则在他们开始使用之前自动保存文件。
如何检查我们是否处于自动恢复状态,然后保存它(没有 ActiveWorkbook.Save),以便用户可以继续使用表单而不会出现问题?非常感谢。
【问题讨论】:
VBA 错误 75 是文件/路径访问错误,崩溃是指 VBA 停止吗?如果是这样,请在 save 方法周围添加错误处理 不,Excel 有一个习惯,即整个应用程序完全崩溃,强制重启,然后是自动恢复过程。 这与用户表单是否正在使用无关。 如果您可以检查ActiveWorkbook.Save
没有保存文件,添加 Application.Sendkeys("^S")
是否有效?
Boss 希望它在用户窗体初始化时检查我们是否处于自动恢复模式,然后保存文件。不使用添加库存功能。
【参考方案1】:
我找不到直接的方法来检查这个,但这里有几个笨拙的选项。似乎如果有两种状态,自动恢复的工作簿可以处于的工作簿:用户上次保存或自动保存。标题反映了它所处的状态。此函数将检查标题中是否存在该短语。
Public Function IsInAutoRecoverMode(wb As Workbook)
Dim wn As Window
Set wn = wb.Windows(1)
IsInAutoRecoverMode = _
wn.Caption Like "*[Autosaved]?" Or _
wn.Caption Like "*[Last saved by user]?"
End Function
我不确定是否还有更多的州在非英语环境中肯定会失败,所以请谨慎使用。
当用户上次保存时,Workbook.Path 属性是文件的存储位置。自动保存时,Workbook.Path 属性等于 Application.AutoRecover.Path。好吧,他们在我的机器上是平等的。这可能只是巧合,但我对此表示怀疑。
由于用户上次保存的路径没有区别,因此您无法使用它来确定您是否处于自动恢复模式。但是,如果用户打开 Autosaved 工作簿,您可能不想只保存,而是希望在正确的位置另存为。您可能需要同时使用这两种技术来获得所需的解决方案。
请务必告诉您的老板这些变通办法,因为您非常勤奋且富有创造力,但它们没有记录在案,并且随时可能失败。至少,我不会在不了解它们是基于一些猜测的情况下使用它们。让我们知道您的最终结果。
【讨论】:
以上是关于Excel 崩溃,VBA 用户窗体无法保存的主要内容,如果未能解决你的问题,请参考以下文章
使用自动化/VBA 填充 Excel 时,Access O365 崩溃