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