Excel的独立代码

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

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


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

  1. 当用户双击时,应该允许他/她select要在该文件上执行的动作的Excel文件。
  2. 如果以上是不可能的,我至less想从Excel文件中调用VBA脚本。

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

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

你已经提到了Visual Studio,VBA和VBScript。 我概述的解决scheme直接与VBA而不是Visual Studio或VBScript。 (但是,你可能会根据我在下面概述的内容来调整Visual Studio(C#或VB)。)希望这有帮助,所以在这里:

这就是我所做的,并最终导致.xlam Excel AddIn作为@chris以上评论。

概观

我从普通的.xslx工作簿开始,向其中添加一个VBA项目,使其成为一个.xlsm。 然后创build一些VBA子(macros)。 然后为工作簿创build一些Excel QAT(快速访问工具栏)button,这些button绑定到(即它们调用)VBA子/macros。 然后将工作簿(在其中的VBA)转换为一个.xlam,这是一个Excel AddIn。 全部完成后,可以从任何工作簿访问这些button(并且VBA代码可以访问任何用户工作簿以及原来位于.xlsm中的那些工作簿)。 此外,与.xlam关联的工作簿是不可见的。 所以,看起来您已经在所有用户的.xlsx窗口中添加了一些QATbutton。 .xlam对用户来说很容易安装(尽pipe我提供了一个button来卸载/重新安装/检查版本)。 您可以独立于用户的工作簿升级.xlam; 用户的工作簿因此可以是仅数据(.xlsx,无VBA)。

细节

写一些你想以后使用的Excel

你需要知道button只能调用没有参数的macros(VBA Subs),所以macros必须检查ActiveSheet,ActiveWorkbook和Selection等东西来确定哪个button被按下了,这样用户数据才能真正操作上。 (如果需要使用VBA代码参考工作簿,请使用“ThisWorkbook”)。 你应该知道,可能会有命名冲突,所以尝试命名相对较长的名称,如MySomewhatUniqueProjectName_button1等无参数的潜艇…

将button添加到您的.xlsm

使用Excel 2010(我认为这适用于2007或更高版本),我将工作簿特定的button放在function区的QAT部分,连接到VBA代码中的macros(VBA subs)。

要做到这一点,您从快速访问工具栏自定义下拉菜单(Excel窗口的最上面一行微小的向下箭头,从左到右的最后一个图标)select“更多命令…”。 从第二个“自定义快速访问工具栏:”标题(从上到下),从“下拉菜单”中select“For XYZ.xlsm” (默认)”。 从“Choose Commands From:”下面,从下拉列表中select“Macros”(而不是“Popular Commands”)。 一旦你select了这两个东西,你可以使用“添加>>”将VBA子目录从左侧框移动到右侧框。 每个如此移动将成为您的QAT中可见的button。 当你这样做,你也可以编辑button的图标和文本,根据需要添加分隔符(如果其他.xlam使用QAT,我总是以分隔符结束)。 (现在是保存这个.xlsm的好时机)

将.xlsm转换为.xlam

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

供参考,注释

稍后我会保留.xlsm进行编辑,但是实际上可以debugging和编辑.xlam文件,稍后将其转换为.xlsm文件:在VBA中find其“ThisWorkbook”条目,然后在“IsAddIn”属性设置为false,则其工作簿将突然显示,您可以另存为.xlsm,或编辑其工作簿并将该属性重新设置为true以直接重新保存为.xlam。)

答案1

你也可以在VB.Net中做到这一点。 只是做一个定期的项目。 ( 评论由@SLaks)

这对我很好,正是我所期待的。

答案2

@ErikEidt发布的非常具有描述性的答案

我没有尝试过,但它似乎是一个很好的替代方法让macros工作。