检查 Sharepoint 上的共享 Excel 文件是否被锁定以供其他用户编辑

Check if a shared Excel file on Sharepoint is locked for editing by another user

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

我已经使用 .CanCheckOut 属性 查看是否有其他用户已经签出文档(通过我的工具,它总是在编辑之前签出,即使图书馆不强制执行),以及代码中止并显示一条消息,如有必要,稍后再试。但有一种情况,用户可能会进入共享文件并手动编辑,然后返回 但不会立即关闭文件 。这意味着 .CanCheckOut 属性 为 TRUE(文件不再签出)但是 'File In Use' 对话在运行时由另一个试图使用我的工具的用户触发,因为共享文件在技术上仍然是尽管未签出,但以编辑模式打开(由其他人打开)。

有什么方法可以检查这种情况,即共享文件已签入但已被其他用户打开为可写?我宁愿这样避免任何用户交互,但即使我们无法避免 'File In Use' 对话,我也需要一种方法来检测它并优雅地退出。

这个 post 由于同样的问题被不幸地放弃了:Check if workbook in SharePoint 365 is locked for editing

请尝试下一个功能:

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 位置,并且我没有在这些情况下对其进行测试。

该功能的基础是无法打开打开的工作簿以进行二进制访问。而且这个评估只需要几毫秒(在内网上,至少……)。