首页 > 解决方案 > 检查 Sharepoint 上的共享 Excel 文件是否被锁定以供其他用户编辑

问题描述

我有一个存储在旧版 SharePoint 2010 文档库中的 Excel 共享工作簿,需要多个用户通过 VBA 工具打开它以进行编辑。先发制人的问题:我不确定图书馆是否在编辑前强制执行 CheckOut,但我不是网站所有者,甚至没有权限查看此设置。

我已经使用 .CanCheckOut 属性来查看另一个用户是否已经签出了文档(通过我的工具,即使库不强制执行它,它总是在编辑前签出),代码中止并显示一条消息以重试以后,如有必要。但是有一种情况,用户可能会进入共享文件并手动编辑,然后重新签入但不立即关闭文件。这意味着 .CanCheckOut 属性为 TRUE(不再签出文件),但另一个尝试使用我的工具的用户在运行时触发了“正在使用的文件”对话框,因为从技术上讲,共享文件在编辑模式下仍处于打开状态(由其他人),尽管没有被签出。

有什么方法可以检查这种情况,即共享文件已签入但其他用户可以写入的位置打开?我宁愿这避免任何用户交互,但即使我们无法避免“使用中的文件”对话,我也需要一种方法来检测到这一点并优雅地退出。

由于同样的问题,这篇文章被悲惨地放弃了:检查 SharePoint 365 中的工作簿是否被锁定以进行编辑

标签: excelvbasharepoint

解决方案


请尝试下一个功能:

Function IsFileBlocked(strFileName As String) As Boolean
  On Error Resume Next
   Open strFileName For Binary Access Read Write Lock Read Write As #1
   Close #1
   IsFileBlocked = Err.Number
   Err.Clear: On Error GoTo 0
End Function

它可以这样使用:

If Not IsFileBlocked("\\pathToYourWorkbook\TestWorkbook.xlsx") Then
    Workbooks.Open "\\pathToYourWorkbook\TestWorkbook.xlsx"
Else
    MsgBox "File bloked (open by another user)...", vbInformation, "Open aborted"
End If

当然,您必须使用指向您的 sharePoint 工作簿的路径而不是 Intranet 路径(我用于测试)...我不使用 sharePoint 位置,并且在这些情况下我没有对其进行测试。

该功能的基础是无法为二进制访问打开打开的工作簿这一事实。而且这个评估只需要几毫秒(在 Intranet 上,至少......)。


推荐阅读