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 用户窗体时没有足够的内存崩溃

使用自动化/VBA 填充 Excel 时,Access O365 崩溃

查看接口类时,VBE 和 Excel 在调试时崩溃

单击保存按钮后如何在用户窗体中添加依赖于另一个组合框的excel vba组合框而不影响清除数据功能

无法在 Excel 崩溃的情况下从工作表中删除命令按钮

在Excel中如何用vba实现:每隔一段时间自动将工作簿保存到以当时时间为文件名的文件中