Excel 的独立代码

mau*_*yat 1 excel vba

可以编写VBA代码来对任何Excel文件执行操作吗?

当我在Visual Studio 中创建一个项目时,它要求将一个Excel文件链接到它。我编写的所有代码都在其中ThisWorkbook.vb,因此仅对链接到项目的Excel文件起作用。


理想情况下,我想要一个脚本:

  1. 当用户双击时,他/她应该被允许选择一个Excel文件,以便对该文件执行的操作。
  2. 如果以上是不可能的,我至少想从Excel文件中调用VBA脚本。

基本上,VBA代码应该独立于任何Excel文件。

我查看了VBScript,但它的语法似乎略有不同。

Eri*_*idt 5

您已经提到了 Visual Studio、VBA 和 VBScript。我概述的解决方案直接使用 VBA 而不是 Visual Studio 或 VBScript。(但是,您可以按照我在下面概述的内容改编 Visual Studio(C# 或 VB)。)希望它有所帮助,所以这里是:

这就是我所做的,它最终会产生一个 .xlam Excel AddIn,正如上面@chris 所评论的那样。

概述

我从普通的 .xslx 工作簿开始,向其中添加一个 VBA 项目,使其成为 .xlsm。然后创建一些 VBA Subs(宏)。然后为工作簿创建一些 Excel QAT(快速访问工具栏)按钮,这些按钮绑定到(即它们调用)VBA 子程序/宏。然后将工作簿(其中包含 VBA)转换为 .xlam,这是一个 Excel 插件。完成后,可以从任何工作簿访问这些按钮(并且 VBA 代码可以访问任何用户工作簿以及最初在 .xlsm 中的工作簿)。此外,与 .xlam 关联的工作簿是不可见的。所以看起来您已经向 QAT 添加了一些按钮,这些按钮出现在所有用户的 .xlsx 窗口中。.xlam 对用户来说很容易安装(尽管我提供了一个按钮来卸载/重新安装/检查版本)。您可以独立于用户的工作簿升级 .xlam;

细节

写一些你想稍后使用的 Excel Subs

您需要注意,按钮只能调用没有参数的宏(VBA Subs),因此宏必须检查 ActiveSheet 和 ActiveWorkbook 和 Selection 之类的内容,以确定按钮是在哪个工作表上按下的,因此要真正操作哪些用户数据在。(如果您需要参考包含 VBA 代码的工作簿,请使用“ThisWorkbook”)。您应该意识到可能存在命名冲突,因此请尝试使用较长的名称命名无参数的 sub,例如 MySomewhatUniqueProjectName_button1 等……

将按钮添加到您的 .xlsm

使用 Excel 2010(我认为这适用于 2007 或更高版本),我将特定于工作簿的按钮放在功能区的 QAT 部分,这些按钮连接到 VBA 代码中的宏(VBA 子程序)。

为此,您可以从快速访问工具栏自定义下拉菜单(Excel 窗口最顶行的小向下箭头,从左到右的最后一个图标)选择“更多命令...”。当“自定义快速访问工具栏”对话框出现时,从(第二个)“自定义快速访问工具栏:”标题(右上),从下拉列表中选择“对于 XYZ.xlsm”而不是“对于所有文档(默认)”。在“从以下位置选择命令:”下,从下拉列表中使用“宏”(而不是“流行命令”)。一旦你选择了这两个东西,你可以使用“Add >>”将 VBA subs 从左框移动到右框。每个如此移动的按钮都将成为您的 QAT 中可见的按钮。在执行此操作时,您还可以编辑按钮的图标和文本,根据需要添加分隔符(我总是以分隔符结尾,以防其他 .xlam 使用 QAT)。(现在是保存此 .xlsm 的好时机。)

将 .xlsm 转换为 .xlam

然后我将 .xlsm 转换为 Excel 加载项,只需将其另存为 .xlam 文件即可。这将最终 (1) 隐藏与您拥有的代码关联的工作簿(尽管它本身仍然可以访问。)。此外,现在,(2)(不可见,因为现在它是 .xlam)工作簿将在加载 Excel 时加载。(为了在用户使用 Excel 但不运行我的 VBA 代码时保持快速,加载 .xlam 时我不运行任何代码,我只在按下按钮时运行代码。)您可以使用管理插件Excel 的插件管理器。要更新 AddIn,您必须使用一些技巧。虽然您可以在 Excel 未运行时复制它,但另一方面,您不能直接卸载 AddIn,您只能从 Excel 中禁用它。但是一旦禁用,您可以删除 .xlam,然后重新启动 Excel,转到 AddIn 管理器尝试使用(现已消失)AddIn,您会得到 Excel 说它找不到它,所以你想删除它。说是,它将被卸载。

仅供参考,注意事项

我保留 .xlsm 以供稍后编辑,但您实际上可以调试和编辑 .xlam,然后通过一些小技巧将其转换回 .xlsm:在 VBA 中找到它的“ThisWorkbook”条目,然后找到“IsAddIn”属性,设置为false,它的工作簿会突然出现,你可以另存为.xlsm,或者编辑它的工作簿并将属性设置回true,直接重新另存为.xlam。)