【问题标题】:Close an excel workbook opened by another user on the same computer using VBA使用 VBA 在同一台计算机上关闭另一个用户打开的 Excel 工作簿
【发布时间】:2018-05-16 06:16:57
【问题描述】:

我一直在使用 excel 2010 为我的工作制定员工时间表的 Excel 文档。我们经常遇到的一个问题是,用户可能打开了工作簿,却忘记在离开之前将其关闭。他们仍然登录到计算机(共享计算机),但该用户配置文件被锁定,并且另一个用户登录。正在使用的文件存储在网络驱动器上,因此它可以被锁定在不同的计算机上,或同一台计算机上想要访问它的当前用户正在使用。当然,如果工作簿处于打开状态,则新用户无法进行更改。我想知道是否有一种方法可以向文档中添加一些代码,这样我就可以放置一个按钮来关闭仍然由另一个用户打开的工作簿实例,也许让当前用户可以选择是否保存它,然后关闭并重新打开当前用户打开的工作簿,以便他们可以访问以进行更改?如果我需要为您澄清任何事情,请告诉我。谢谢!

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    你可以做点什么。主要思想是如果没有人更改单元格的选择(即选择 A1 或其他单元格),例如 10 分钟,则关闭工作簿。

    1) 将此代码添加到 vba 模块中:

    Public lastSelectionChange As Date
    
    Sub closeWB()
        If DateDiff("n", lastSelectionChange, Now) > 10 Then
            ThisWorkbook.Close SaveChanges:=True
        Else
            Application.OnTime Now + TimeSerial(0, 10, 0), "closeWb"
        End If
    End Sub
    

    2) 将以下代码添加到ThisWorkbook 模块:

    Private Sub Workbook_Open()
        lastSelectionChange = Now
        closeWB
    End Sub
    
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
        lastSelectionChange = Now
    End Sub
    

    函数 closeWb 将每 10 分钟调用一次(Application.OnTime Now + TimeSerial(0, 10, 0), "closeWb" 执行此操作)并检查最后一次选择更改是否超过 10 分钟前。如果是,则关闭 wb。

    【讨论】:

    • 谢谢!关闭计时器并不是我想要的,但我认为它是最接近的。感谢您的帮助。
    【解决方案2】:

    这将是操作系统中非常严重的安全问题。能够与其他用户的文件和正在运行的程序进行交互。

    但是,您可以让当前用户执行“另存为”或创建副本并从那里继续

    【讨论】:

    • 是的,我想这可能是一个很长的镜头,但我想我还是会问。我希望避免另存为方法,因为这有点麻烦。大多数时候,锁定工作簿的人是无论如何都不需要编辑它的人,他们可能只是在查看数据。
    【解决方案3】:

    我想我有一个解决办法。 您放置一个计时器代码,例如每 30 秒在特定文件夹中搜索特定文件/文件名。 如果文件不存在,则什么也不做。 如果文件存在,则它会关闭工作簿而不保存更改。 要在打开此工作簿的对等 PC 上启动关机程序,您需要创建一个单独的宏来创建该特定文件并在关机前将其删除。 您必须确保关闭过程不适用于工作簿的只读副本。或者,您可以手动将文件粘贴到那里并在主工作簿关闭后删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-08
      • 2020-04-04
      相关资源
      最近更新 更多