首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止>1人同时运行VBA宏(共享wkb)

防止>1人同时运行VBA宏(共享wkb)
EN

Stack Overflow用户
提问于 2017-06-05 02:21:41
回答 2查看 248关注 0票数 1

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

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

我一直在尝试让上面答案中的代码在VBA中工作,但这似乎是vbs的事情,我想避免这种情况。

至少可以说,我不是专家,所以我在理解如何在Excel VBA中使用它时遇到了麻烦。我甚至不知道这是否可能。

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

但是我不知道如何将这两者结合起来。或者即使WMI是正确的方式。

任何形式的帮助我都会很感激。

EN

回答 2

Stack Overflow用户

发布于 2017-06-05 06:36:18

我过去常常创建一个“锁定文件”,它只是一个空文本文件,工作簿的名称后跟用户名和.LCK的扩展名

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

如果它没有找到锁定文件,那么它会创建一个锁定文件,然后照常进行。如果它找到了一个,但它是相同的用户名(即该用户使其崩溃),它继续打开。

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

票数 0
EN

Stack Overflow用户

发布于 2017-06-05 10:19:31

这里没有代码,理论还没有测试,但是防止不同的用户在共享工作簿上执行宏的想法需要一些思考。

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

  1. 假设命名范围 MUser (宏用户)是隐藏工作表
  2. 中范围A1宏运行时,它将首先检查MUser是否为空,如果为空,则在执行下一步之前将其值更改为Environ("USERNAME")并保存文件(在此,我不确定在其他会话中是否更新了该值)。
  3. 如果MUser不为空,请中止或几秒钟后重试。H210 H111宏完成时,MUser将为ClearContents,并保存文件以释放工作簿中的宏。H212G213

想法在这里,但请测试。发布您自己的代码以供我们进行故障排除。您也可以使用工作簿事件以这种方式"lock“宏的执行。或者甚至使用这个隐藏的工作表来制作日志记录以进行调试。此外,还需要实现一些防故障功能(例如,宏启动时的时间戳,并在几分钟后覆盖锁)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44357417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档