【问题标题】:Password-protect the macros of a second workbook from a first using VBA使用 VBA 对第二个工作簿的宏进行密码保护
【发布时间】:2011-08-13 13:38:19
【问题描述】:

我有一个工作簿,它创建了第二个工作簿(使用ThisWorkbook.SaveCopyAs)来很好地向用户展示数据。它依赖宏进行部分处理。

但是,我被要求让用户无法访问这些宏。他们仍然需要运行它们,但要查看/编辑它们应该需要密码。我可以弄清楚如何使用 GUI(VBA 编辑器 -> 右键单击​​ VBAProject -> VBAProject 属性 -> 保护,勾选框并输入密码),但我还没有找到使用 VBA 的方法。 Workbook.Protect 函数似乎锁定了所有除了 VBA。

如果我尝试将它应用到源工作簿,我会收到“由于项目受到保护而无法执行操作”,所以这也不起作用。

我正在运行 2010,但工作簿需要与 2003 兼容,所以没有花哨的新技巧。 :(

【问题讨论】:

  • 如果我的回答没有帮助,搜索 VBA Project Properties via VBA 似乎会产生一些结果。
  • 我无法复制这个。如果我创建一个带有受密码保护的 VBA 模块的工作簿,请在其上放置一个执行 ThisWorkbook.SaveCopyAs 的按钮,然后点击它...它会保存一个带有受保护的 VBA 项目的工作簿。您真的是指ThisWorkbook,还是指ActiveWorkbook?而且,如果是后者,你怎么把宏放在那里?

标签: excel excel-2003 vba


【解决方案1】:

我遇到了类似的问题。我需要 excel 代码来填充用户创建的新工作表,但我想用密码保护项目。只要我不使用密码保护,它就可以很好地工作,但 Excel 不允许它在具有密码保护的新工作表中生成代码。

解决方案很有趣。给您的项目起一个简单的名称或缩写。人们可以轻松找到的东西。

您使用密码保护您的整个项目并将生成的文件保存为 XLA(附加)。

然后取消保护工作簿,重命名文件(以防万一您犯了错误)并删除所有代码、模块、类、表单等。保存新删除的 Excel 文件。

现在打开新的剥离文件并在 TOOLS/add ons 中添加 xla。然后转到 VBA 编辑器,References 并使用新名称和链接找到您的项目(您可能需要保存并重新打开一次才能在引用下找到)。

就是这样。没有所有代码的新文件将使用旧代码运行,但如果没有密码,您将无法访问它。同时,由于新工作簿项目不受密码保护,旧代码可以像以前一样将代码放在新工作表上

我发现如果您更改位置,您的用户可能需要在参考文献中找到链接,但我相信您可以创建一个宏来自动查找和链接(当然,该宏是可见的世界)。

我认为这将解决受保护代码的任何问题。

祝你好运

【讨论】:

    【解决方案2】:

    这是一个描述不使用sendkeys设置项目密码的方法http://www.standards.com/Office/SetVBAProjectPassword.html

    【讨论】:

      【解决方案3】:

      This post 可能对你有帮助。请注意,在 cmets 中它说您需要添加 vbeext1.olb

      【讨论】:

      • wow 这是一个丑陋的黑客。任何需要使用 SendKeys 的东西听起来都可能在出现问题的第一个迹象时中断。 :/.
      • @Margaret 你没有说你想要漂亮 :) 大声笑正如我上面提到的,我在搜索中收到的其他一些页面我并没有真正看过。我认为这是专家们不想在网上分享他们是如何做到的事情之一......
      猜你喜欢
      • 2019-10-27
      • 1970-01-01
      • 2018-06-28
      • 2019-12-04
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 2020-10-05
      相关资源
      最近更新 更多