如何通过VBA获取Excel共享工作簿的当前协作用户列表?
获取共享Excel工作簿的所有活跃用户列表
背景
团队文档库站点中有一个Excel共享工作簿,需要通过VBA按需获取当前打开该工作簿的用户列表。
问题
使用常规VBA代码仅能获取执行代码的用户,无法获取所有打开该工作簿的活跃用户。
尝试过的代码
Sub getListUsingUsers() Users = ActiveWorkbook.UserStatus For i = LBound(Users, 1) To UBound(Users, 1) Debug.Print Users(i, 1) Next End Sub
解决方案
ActiveWorkbook.UserStatus属性本身就是用来返回共享工作簿中所有当前用户的信息数组,出现仅显示自身的情况,可从以下几点排查解决:
- 确认工作簿处于共享状态:通过
审阅 > 共享工作簿检查,确保勾选“允许多用户同时编辑,同时允许工作簿合并”选项,保存后重新打开工作簿再测试代码。 - 处理缓存延迟:共享工作簿的用户状态可能存在缓存同步滞后,可手动刷新工作簿(按
Ctrl+Alt+F5)后执行代码,或者在代码中加入刷新逻辑:Sub getActiveUsers() ' 刷新共享工作簿数据 ActiveWorkbook.RefreshAll ' 获取用户状态数组 Dim users As Variant users = ActiveWorkbook.UserStatus ' 遍历输出所有用户及相关信息 Dim i As Integer For i = LBound(users, 1) To UBound(users, 1) Debug.Print "用户名:" & users(i, 1) & ",最后更新时间:" & users(i, 2) & ",状态:" & users(i, 3) Next i End Sub - 检查权限设置:确认执行代码的用户拥有查看共享用户列表的权限,部分文档库的权限配置可能限制该信息获取,需联系管理员核实。
补充说明:UserStatus返回的数组包含三个维度的信息,分别是用户名、用户最后更新时间、当前编辑状态。
内容的提问来源于stack exchange,提问作者Sgdva
相关产品推荐
相关产品推荐

