【问题标题】:VBA - How run a Macro from another workbook without opening it?VBA - 如何从另一个工作簿运行宏而不打开它?
【发布时间】:2019-05-13 15:21:34
【问题描述】:

我想将我的所有 VBA 项目保存在 Excel 工作簿(或其他类型的文件,如果可能)中,然后将其嵌入到另一个工作簿中运行。我看过有关它的主题,但只找到了运行打开第一张工作表的宏的方法。

我想在不打开第一个工作簿的情况下在第二个工作簿中运行第一个工作簿中的宏。我该怎么做?

【问题讨论】:

  • 当您说 Excel 工作表 时,您是指整个 Excel 文件(工作簿),还是文件中的单个工作表(工作表)?
  • 您的要求不明确。请再次写下您的描述。这里的“表”是什么意思?
  • 我的意思是工作簿。编辑了我的描述

标签: excel vba


【解决方案1】:

将带有宏的文件保存为 xlam 文件,Excel 可以在每次打开 Excel 时加载它们。

您需要打开文件 -> 选项 -> 加载项。

在底部有一个按钮转到(或其他东西,我当前计算机上没有英文 Excel。)
然后通过单击浏览并找到刚刚保存为 xlam 文件的文件,将文件添加到列表中。

【讨论】:

  • 指向您保存文件的位置...一旦您选择 .xla 或 .xlam 的扩展名,保存位置将更改为指向插件文件夹。我相信普遍的共识是确保您保存到 XLSTART 文件夹,而不是 addin 文件夹。对于大多数计算机,位置是:%USERPROFILE%\AppData\Roaming\Microsoft\Excel\XLSTART (注意:在计算机上安装项目时,我使用该路径作为批处理文件,以减轻对完整本地文件的需要路径,例如用户名)。
  • 为什么选择 XLSTART 文件夹?我从来没有在那里保存过我的任何插件。与加载项文件夹相比,这有什么好处?
  • 见:accessanalytic.com.au/xlstart-folder;关于 XLSTART 与 AddIns 文件夹的一般差异,我不知道为什么它们都存在以及用于什么目的。我注意到,当用户使用 Excel 2010 到 Office 365 时,XLSTART 文件夹将在 Excel 加载时加载模块,允许访问所有宏,并允许将它们添加到快速栏;这是当我有多个用户保存宏并且我的 50% 以上的人不会在 VBA 编辑器中显示 AddIn 文件夹文件时给我的方法。
  • 我阅读了那里列出的原因,坦率地说,这是我不在该文件夹中放置任何东西的一个很好的理由。在我的 xlam 文件中,我总是包含自动安装 xlam 的代码,这意味着最终用户只打开文件,他/她将被提升为安装是/否。然后就安装好了,不用找文件夹手动放了。每个 xlam 都有查找更新的代码。这意味着我可以上传一个新版本,所有运行这个 xlam 的人都会收到一条消息,那里有一个新版本,代码将自行禁用并安装新版本。
【解决方案2】:

想到两种情况:

1) 您有第二个宏供个人使用,可以将其保存在本地(保存在:%USERPROFILE%\AppData\Roaming\Microsoft\Excel\XLSTART)。这将允许您为宏等创建快速按钮。这些类型的宏使用 Excel 打开,并且将是默认 VBA 编辑器内的单独 VBA 项目。

2) 您有多个用户需要访问的网络或驱动器,因此每个用户的文件(.xlsm 或 .xlsb)中都有一个宏,其中该内部宏读取 Application.Run "filepath\workbookname.xlsb!宏”,它还允许您调用私有子例程(请注意,您可以使用 Call,但 Application.Run 将确保甚至可以访问私有宏)。这不应该要求打开另一个工作簿,尽管我个人有一个用户的计算机总是打开另一个文件,无论如何。


编辑:

第三种情况(真的是 2b):

3) 您有一些文件要定期访问另一个文件...您将遵循类似的方法到 2 点,在其中为 Application.Run 创建宏,但您可以保存它XLSTART 文件夹中的宏...这将允许您拥有其他人可能也想要访问和利用的源宏位置。 source 文档将允许您为许多用户维护 1 个文件。

【讨论】:

    【解决方案3】:

    你的回答很棒!很高兴了解@Cyril 的 XLSTART 文件夹,但根据@Andreas 的回答,我找到了我的路径。

    正如@Andreas 所说,添加加载项的“问题”是因为我的 VBA 项目可以在 VB 编辑器上用于该计算机上的每个工作簿,并且要运行我的宏,我必须使用 Application.运行(“workbook.xlam!宏”)。

    然后我找到了References,我有同样的功能,包括我可以删除我的.xlam文件来删除我的代码,并且没有我上面提到的问题。

    添加我的 VBA .xlam 文件作为参考,它将仅适用于该特定工作簿,并且我可以像在同一个工作簿上一样运行我的宏。

    一般知识:

    添加参考:

    1- 将您的项目另存为 Excel 插件(.xlam 文件)

    2- 打开您的目标工作簿,转到 Visual Basic 编辑器

    3- 转到工具 > 参考 > 浏览...找到您的 .xlam 文件并确保它已被选中。

    4- 完成!现在您将在编辑器上看到该项目,并且可以像在同一个工作簿上一样运行您的宏。

    【讨论】:

    • 我认为还有其他更好的方法可以将代码限制为一个或几个工作簿。您可以使代码仅在 activeworkbook 是某个名称时运行。或者将其限制为工作簿的布局,比如 A1 是“日期”,B1 是其他东西,然后运行代码,否则不运行。我有一个代码可以查看计算机上登录的用户名,如果不是我,请不要运行。你能想象到的都有可能
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    相关资源
    最近更新 更多