excel - 检查 Sharepoint 上的共享 Excel 文件是否被锁定以供其他用户编辑
问题描述
我有一个存储在旧版 SharePoint 2010 文档库中的 Excel 共享工作簿,需要多个用户通过 VBA 工具打开它以进行编辑。先发制人的问题:我不确定图书馆是否在编辑前强制执行 CheckOut,但我不是网站所有者,甚至没有权限查看此设置。
我已经使用 .CanCheckOut 属性来查看另一个用户是否已经签出了文档(通过我的工具,即使库不强制执行它,它总是在编辑前签出),代码中止并显示一条消息以重试以后,如有必要。但是有一种情况,用户可能会进入共享文件并手动编辑,然后重新签入但不立即关闭文件。这意味着 .CanCheckOut 属性为 TRUE(不再签出文件),但另一个尝试使用我的工具的用户在运行时触发了“正在使用的文件”对话框,因为从技术上讲,共享文件在编辑模式下仍处于打开状态(由其他人),尽管没有被签出。
有什么方法可以检查这种情况,即共享文件已签入但其他用户可以写入的位置打开?我宁愿这避免任何用户交互,但即使我们无法避免“使用中的文件”对话,我也需要一种方法来检测到这一点并优雅地退出。
由于同样的问题,这篇文章被悲惨地放弃了:检查 SharePoint 365 中的工作簿是否被锁定以进行编辑
解决方案
请尝试下一个功能:
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 上,至少......)。
推荐阅读
- html - Password_Digest 不隐藏密码
- arrays - 在 Google 表格中过滤过去 10 天的不同电子表格中的日期
- javascript - 如何在 Vue.js 3 设置中获取查询参数?
- mysql - 如何从连接表中计算项目?
- discord.js - discord.js 没有在提及时获得用户标签
- mysql - MySQL 8:如何从 FK 创建列?
- java - JPQL SELECT 未检索更新的数据
- python - 无法在字符串中间获取正确的通配符匹配
- swift - Swift CoreData:发送到实例的无法识别的选择器
- list - 在没有递归的情况下计算Scheme?