首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >VBA: 获取共享工作簿的当前在线用户

VBA: 获取共享工作簿的当前在线用户

作者头像
Exploring
发布2025-05-24 12:20:47
发布2025-05-24 12:20:47
18700
代码可运行
举报
运行总次数:0
代码可运行

在日常工作中,尽管 Microsoft 已不再推荐使用“共享工作簿(Shared Workbook)”功能,但工作中,由于协作方式的限制,旧版共享工作簿功能依然广泛存在

在使用共享工作簿进行多人同时编辑时,我们常常会遇到这样的需求:

👀“现在到底有哪些人在同时编辑这个文件?”

这个问题可以通过 Excel VBA 的一个隐藏功能——Workbook.UserStatus 来轻松解决。本文将通过一个完整的 VBA 实例,教你如何快速获取共享工作簿中的在线用户列表,并将其写入工作表中进行记录。

✅功能目标:查看当前在线的协作者

我们编写了一个实用的 VBA 宏,命名为:

Sub WriteSharedUsersToSheet_showMessage()

功能亮点包括:

  • 检查当前工作簿是否启用了共享编辑;
  • 获取当前所有在线用户的信息;
  • 将用户名、登录时间等写入指定工作表;
  • 统计并显示在线用户总数。
💻完整 VBA 代码实现
代码语言:javascript
代码运行次数:0
运行
复制
Sub WriteSharedUsersToSheet_showMessage()

    Dim wb As Workbook
    Set wb = ThisWorkbook

    Dim ws As Worksheet
    Set ws = wb.Sheets(1)

    Dim userArray As Variant
    Dim i As Long, rowStart As Long
    Dim userCount As Long

    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    ' 清除旧数据
    ws.Range("D5:E24").ClearContents
    ws.Range("D3").ClearContents

    ' 检查是否为共享工作簿
    If Not wb.MultiUserEditing Then
        MsgBox "该工作簿未启用共享编辑功能。", vbExclamation
        GoTo CleanUp
    End If

    ' 获取用户状态
    userArray = wb.UserStatus
    rowStart = 5

    For i = LBound(userArray, 1) To UBound(userArray, 1)
        ws.Cells(rowStart, 4).Value = userArray(i, 1) ' 用户名
        ws.Cells(rowStart, 5).Value = Format(userArray(i, 2), "yyyy/m/d hh:mm") ' 打开时间
        rowStart = rowStart + 1
    Next i

    userCount = UBound(userArray, 1) - LBound(userArray, 1) + 1
    ws.Cells(3, 4).Value = userCount ' D3 显示用户数
    MsgBox "当前在线用户,共 " & userCount & " 人。", vbInformation

CleanUp:
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    Application.Calculation = xlCalculationAutomatic

End Sub

📘深入解读:Workbook.UserStatus 的结构与用法

当共享工作簿启用后,VBA 提供的 Workbook.UserStatus 属性可以让你获取当前所有在线用户的信息。它返回的是一个 二维数组(Variant 类型),每一行代表一个用户,每一列提供如下信息:

数组下标

含义

类型

说明

(i, 1)

用户名(User Name)

String

当前正在使用此共享工作簿的用户名称

(i, 2)

打开时间(Access Time)

Date

用户打开该工作簿的日期与时间

(i, 3)

清单类型(Edit Type)

Integer

1 = 独占 (Exclusive),2 = 共享 (Shared)

🚨使用建议与注意事项
  • ✅ 仅在启用了“共享工作簿(旧版)”功能时有效;
  • ⚠️ 不适用于 Excel Online 或新版“协作模式”;
  • 📎 UserStatus 只读,不能用于控制其他用户行为;
  • 🧪 建议在测试副本上运行脚本,避免误操作影响实际使用文件。
📌总结

虽然“共享工作簿”功能正在逐步淡出,但在现实中,它仍是某些企业和团队协作的重要工具。通过 VBA 的 Workbook.UserStatus,我们可以清晰了解当前正在协作的用户,提升文件协同的透明度和管理效率。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据处理与编程实践 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ✅功能目标:查看当前在线的协作者
  • 💻完整 VBA 代码实现
  • 🚨使用建议与注意事项
  • 📌总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档