Excel 崩溃,VBA 用户窗体无法保存

标签 excel vba crash autosave

我有一个 Excel 用户表单,用户可以在其中输入信息,然后点击“添加股票”按钮。按下此按钮后,信息将输入到电子表格中,然后使用“ActiveWorkbook.Save”保存电子表格。

问题是工作电脑很旧,Excel 很容易崩溃。当电子表格自动恢复时,添加库存功能不再起作用,它会崩溃并出现代码 75 错误。在这种情况下,ActiveWorkbook.Save 似乎不起作用,直到用户手动按下 CTRL-S。老板坚持认为我们的用户不够精通计算机,无法管理此操作,因此我需要以某种方式检查 Excel 是否崩溃,如果是,则在他们开始使用之前自动保存文件。

如何检查我们是否处于自动恢复状态,然后保存它(不使用 ActiveWorkbook.Save)以便用户可以继续使用表单而不会出现问题?非常感谢。

最佳答案

我找不到直接的方法来检查这一点,但这里有一些笨拙的选项。看来,如果自动恢复的工作簿可以处于两种状态:用户上次保存或自动保存。标题反射(reflect)了它所处的状态。此函数将检查标题中是否存在该短语。

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。嗯,它们在我的机器上是平等的。这可能只是巧合,但我对此表示怀疑。

由于用户上次保存的路径不具有唯一性,因此您无法使用它来确定您是否处于自动恢复模式。但是,如果用户打开自动保存的工作簿,您可能不想只保存,而是在正确的位置另存为。您可能需要使用这两种技术来获得您想要的解决方案。

请务必告诉老板这些解决方法是因为您非常勤奋且富有创造力,但它们没有记录在案,并且随时可能失败。至少,如果不了解它们是基于一些猜测,我就不会使用它们。让我们知道您最终会得到什么。

关于Excel 崩溃,VBA 用户窗体无法保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15832576/

相关文章:

sql - Excel-Access ADO 更新值

excel - 用户定义函数的自动填充

excel - 使用多个条件搜索显示运行时错误 91

iphone - 在循环中使用CTFontRef创建NSMutableAttributedString时出现问题

java - GridView内存不足位图

excel - 将多个值索引到单个单元格中

excel - 在 API GetSystemTime 中使用经过的毫秒数进行性能测试

python - 使用 xlwings 写入现有 Excel 工作簿

excel - 在更改事件时将时间戳应用于动态行

qt - 如何在 QTimer 中检查 QtDesigner 生成的小部件点的有效性?