excel保存VBA问题及其解决方法

Posted

技术标签:

【中文标题】excel保存VBA问题及其解决方法【英文标题】:excel saving with VBA issues and ways around it 【发布时间】:2016-06-17 11:14:36 【问题描述】:

我有一个相对复杂的子程序,它在 Excel 中的工作簿中传输一堆数据并做一些其他事情,然后使用 activeWorkbook.save 将文件保存在子程序的末尾

但是由于我不知道的原因,当文件已打开很长时间并且我保存它时,会给我一条消息,说该文件已被另一个用户编辑并提示我通知另一个用户而不是保存或覆盖其他用户所做的任何更改。有没有办法对 sub 进行编码以使其无论如何都被覆盖,这样即使出现该对话框,也不会阻止 sub 运行?

另外,没有其他人编辑该文件,所以我不知道为什么它首先给我消息,我只是希望它绕过它,如果它碰巧出现。

感谢您的帮助!

【问题讨论】:

也许你正在寻找这样的东西:If ThisWorkbook.MultiUserEditing Then ThisWorkbook.ExclusiveAccess? ThisWorkbook 内的Workbook_Open 事件中,在完成任何编辑之前。您还需要处理失败并且您无法获得独占访问权限的情况,以便妥善处理 @Dave 我认为它不应该出现在Workbook_Open 事件中。否则,文件不会/不应该在Shared Mode 中。但显然(不时地)多个用户必须处理它。所以,exclusive 模式应该只在绝对需要的时候执行。 OP 必须指定要求,以便我们建议如何启动。如果文件永远不需要处于共享模式,那么它很容易:删除共享,保存文件。完成。 @Ralph,你说得对,我正在考虑我在这里管理的一些电子表格,其中代码位于 Workbook_Open 事件中,但也在检索用户 ID 之后;该代码取决于哪个用户正在访问该文件;例如,当我打开文件时,它给了我独占访问权限,因为我需要它来对它的设计进行任何更改,但对于其他只是通过它处理工作的用户则不需要 @Dave 听起来像是一个可行的解决方案。我猜您使用environ("UserDomain") & "\" & environ("UserName") 来确定用户(使用Windows 身份验证/SSPI)?我希望您知道这不提供任何安全性,任何有权访问该文件的人都可以在文件的 VBA 中轻松更改它。无论如何,我想我们都可以从这个有趣的小话语中看出,这篇文章需要更多细节,以便我们提供推荐。 【参考方案1】:

我想我们终于找到了解决这个问题的方法:

ThisWorkbook.Saved = False
Application.DisplayAlerts = False
ThisWorkbook.SaveAs ThisWorkbook.FullName, FileFormat:=52
Application.DisplayAlerts = True
If Not ThisWorkbook.Saved Then MsgBox "Saving the file failed." & Chr(10) & "Please try again later..."

工作簿的.Saved 属性是可读可写的。因此,第一行确保该文件被标记为“未保存”。这很重要,因为更改被禁用,我们不知道文件是否真的被保存(没有这个属性)。

一旦尝试保存文件(此处为 .xlsm,您可能希望/必须更改它),就会读取 .Saved 属性以确保保存确实有效。

【讨论】:

以上是关于excel保存VBA问题及其解决方法的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA:将变体数组返回到选定范围时需要 255 转置字符限制的解决方法

唯一计数(Excel VBA 与公式)更快的方法

VBA密码保护Excel工作簿而不保存

EXCEL VBA,为啥函数子过程中不能使用find方法。

打开excel出现灾难性错误并提示内存溢出的解决方法

excel里面我想 用VBA实现调用另一个工作簿中的数据怎么解决