使用VBA关闭同一台计算机上另一个用户打开的excel工作簿

时间:2014-01-19 21:17:22

标签: excel excel-vba vba

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

3 个答案:

答案 0 :(得分:5)

你可以做一些技巧。如果没有人在例子中改变单元格的选择(即选择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。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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