【问题标题】:How to have Excel to run VBA code saved in a text file?如何让 Excel 运行保存在文本文件中的 VBA 代码?
【发布时间】:2019-06-26 07:59:54
【问题描述】:

我不想将 VBA 代码保存在 Excel 文件内的模块中,而是希望将代码保存在文本文件中,例如 module1.vba。在 Excel 中,module1.vba 将被加载或导入并像普通模块一样运行。

这可能吗?该怎么做?

在 Excel 中,在 VBA 编辑器中,菜单中有 Insert > File... 选项可以满足我的需求,但我不知道如何使用最少的 VBA 代码自动加载保存的真实代码作为文本。

这样做的原因是允许使用基于文本的应用程序(如 git)进行代码修订控制。

--- 编辑---

这个answer 展示了一个很好的替代工作。但是,我仍然不太喜欢复制东西。

【问题讨论】:

  • @Pᴇʜ 这并没有提供通过 VBA 实现的方法。
  • 或者使用已经存在的工具之一。不要重新发明*:只是一个例子(你可以在谷歌上找到更多):xltools.net/version-control-for-vba-macros
  • @ErikA 是的,但是由于 “这样做的原因是允许代码修订控制” 在 git it 下,没有必要使用 VBA 来执行此操作。见What is the x/y problem。有时人们只是要求 X,因为他们没有意识到他们的实际问题是 Y。
  • 如果您想从文本文件运行 VBA 代码,那么您可以这样做。 [1] 在运行时,创建文本文件的副本[2] 将文件重命名为.vbs [3] 执行.vbs 文件 [4] 删除副本。 [注意] 我建议稍微修改代码以使其与vbscript 兼容。和 vba 差不多 :)

标签: excel vba


【解决方案1】:

您可以使用简单的单行轻松导入 VBA 文件:

Application.VBE.ActiveVBProject.VBComponents.Import "C:\Path\To\File.bas"

这适用于从 VBA IDE 导出的文件,其中包括模块名称和其他可以基于每个模块进行配置的属性等信息。

您需要启用对 VBA 项目对象模型的信任访问才能使其工作。您可以在信任中心设置中的宏设置下找到它。

【讨论】:

  • 谢谢埃里克。这似乎是正确的方法。为了完整起见,最好包含处理以前存在的同名模块的代码,并在完成后删除模块,这样它就不会粘在 excel 文件中。此外,值得一提的是,它仅适用于未受保护的项目。
  • 如果您觉得相关,请随意编辑,这些事情对我来说似乎很明显。我会尝试在它通过队列之前对其进行审查/
最近更新 更多