我有一个 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/