我的目标是获取所有当前运行脚本的列表,以便检查其他用户是否同时运行相同的VBA宏(如果是,则停止代码等,类似以下问题的OP需要什么)。这将是一个共享的工作簿(我知道它不是为这类工作而设计的,但我需要尝试一下)。
https://stackoverflow.com/a/36116091/5947935
我一直在努力让上面的答案中的代码在VBA中运行,但它似乎是一个vbs的东西,我想避免这种情况。
至少我不是专家,所以我无法理解如何在Excel VBA中使用它。我甚至不知道它是否可能。
我也发现了这一点:VBA Getting program names and task ID of running processes它运行正常,但它只列出正在运行的进程。
我不知道如何将两者合并......或者即使WMI是正确的方法。
我会感激任何帮助。
答案 0 :(得分:0)
我曾经创建了一个“锁定文件”,它只是一个空文本文件,其中包含工作簿的名称,后跟用户名和扩展名.LCK
我的代码在自动打开时做的第一件事就是找一个锁定文件,然后向用户报告用户打开它然后取消打开。
如果找不到锁定文件,则会创建一个并正常进行。如果它找到一个,但它是相同的用户名(即用户让它崩溃),它继续打开。
代码所做的最后一件事是删除文件。
答案 1 :(得分:0)
此处没有代码且理论尚未经过测试,但是防止不同用户在共享工作簿上执行宏的想法需要一些思考。
我会创建一个隐藏的工作表,并在首次启动宏时使用其中一个单元格来存储Environ("USERNAME")
- 指示是谁运行它,然后在完成后清除它,先进先出 - 进行。
Environ("USERNAME")
并在下一步之前保存文件(此处我不确定该值是否已更新在其他会议上)。想法在这里,但请测试。发布您自己的代码以便我们进行故障排除。您还可以将工作簿事件用于" 锁定"以这种方式执行宏。甚至可以使用这个隐藏的工作表来创建调试日志记录。还需要实现一些故障安全(例如宏启动时的时间戳,并在几分钟后覆盖锁)。