【问题标题】:Check if a shared Excel file on Sharepoint is locked for editing by another user检查 Sharepoint 上的共享 Excel 文件是否被锁定以供其他用户编辑
【发布时间】:2020-10-13 12:52:30
【问题描述】:

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

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

有没有办法检查这种情况,即共享文件已签入但其他用户可写打开?我宁愿这样避免任何用户交互,但即使我们无法避免“文件正在使用”对话框,我也需要一种方法来检测并优雅退出。

这篇文章因同样的问题被悲惨地放弃了:Check if workbook in SharePoint 365 is locked for editing

【问题讨论】:

    标签: excel vba sharepoint


    【解决方案1】:

    请尝试下一个功能:

    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
    

    除了 Intranet 路径(我出于测试原因使用),您必须使用 sharePoint 工作簿的路径,当然......我不使用 sharePoint 位置,并且在这些情况下我没有测试它。

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

    【讨论】:

    • 我以为您没有阅读原始僵尸帖子,其中非常相似的方法不起作用,但我看到您在虚拟文件操作中使用了“二进制访问”,这似乎确实有效我的 SharePoint 配置。做得好,谢谢 - 这让我有点发疯了!
    • @RobBaker:我必须承认我没有阅读您所指的帖子......我只发布了一段我曾经在需要时用于类似目的的代码。但是,就像我说的,只在 Intranet 上。从理论上讲,它也应该适用于您的情况......很高兴我能提供帮助!
    猜你喜欢
    • 2020-12-21
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多