阻止> 1人一次运行VBA宏(共享wkb)

时间:2017-06-04 18:21:41

标签: vba excel-vba vbscript excel

我的目标是获取所有当前运行脚本的列表,以便检查其他用户是否同时运行相同的VBA宏(如果是,则停止代码等,类似以下问题的OP需要什么)。这将是一个共享的工作簿(我知道它不是为这类工作而设计的,但我需要尝试一下)。

https://stackoverflow.com/a/36116091/5947935

我一直在努力让上面的答案中的代码在VBA中运行,但它似乎是一个vbs的东西,我想避免这种情况。

至少我不是专家,所以我无法理解如何在Excel VBA中使用它。我甚至不知道它是否可能。

我也发现了这一点:VBA Getting program names and task ID of running processes它运行正常,但它只列出正在运行的进程。

我不知道如何将两者合并......或者即使WMI是正确的方法。

我会感激任何帮助。

2 个答案:

答案 0 :(得分:0)

我曾经创建了一个“锁定文件”,它只是一个空文本文件,其中包含工作簿的名称,后跟用户名和扩展名.LCK

我的代码在自动打开时做的第一件事就是找一个锁定文件,然后向用户报告用户打开它然后取消打开。

如果找不到锁定文件,则会创建一个并正常进行。如果它找到一个,但它是相同的用户名(即用户让它崩溃),它继续打开。

代码所做的最后一件事是删除文件。

答案 1 :(得分:0)

此处没有代码且理论尚未经过测试,但是防止不同用户在共享工作簿上执行宏的想法需要一些思考。

我会创建一个隐藏的工作表,并在首次启动宏时使用其中一个单元格来存储Environ("USERNAME") - 指示是谁运行它,然后在完成后清除它,先进先出 - 进行。

  1. 让我们说命名范围 MUser (宏用户)是隐藏工作表中的范围A1
  2. 当宏运行时,它将首先检查MUser是否为空,如果是,则将其值更改为Environ("USERNAME")并在下一步之前保存文件(此处我不确定该值是否已更新在其他会议上)。
  3. 如果MUser不为空,请在几秒钟内中止或重试。
  4. 当宏完成时,MUser将是 ClearContents ,并保存文件以释放宏的工作簿。
  5. 想法在这里,但请测试。发布您自己的代码以便我们进行故障排除。您还可以将工作簿事件用于" 锁定"以这种方式执行宏。甚至可以使用这个隐藏的工作表来创建调试日志记录。还需要实现一些故障安全(例如宏启动时的时间戳,并在几分钟后覆盖锁)。