Excel编程方法

在UDF,macros,加载项,自动化加载项,XLL或VSTO之间的Excel编程有什么区别。
我应该使用哪一个,在哪种情况下?

我会尝试组合/反对你提到的一些元素:

VSTO vs. VBA
VBA(Visual Basic for Applications)是编写Office自动化的“经典”方式。 Excel有一个开发界面,你可以从办公室开始写macros和UDF,而且这个开发界面在10年前一直没有改变。 另一方面,部署是微不足道的,VBA提供了很好的function,如macroslogging,它将您的行为logging到代码中,并提供了一个找出对象模型的好方法。
VSTO最近出现了,允许你使用.NET自动化办公(使用COM)。 您可以利用所有的.NET和Visual Studio(例如:添加WPF表单),这提供了很大的灵活性,但部署更复杂。
UDF vs.macros与加载项
用户定义的function是定制的方法,将保持附加到您的工作簿; 一旦添加获得与“内置”Excel函数相同的状态:您可以从工作表调用它们= MyFunction()
macros是将保持附加到您的工作簿的过程。 他们可以直接由用户调用,或附加到事件(例如:当工作表被选中,这样做)。
加载项不附加到特定的文档,而是附加到应用程序本身。 通常,macros或UDF附加到工作簿:当您打开文档时,代码将变得可用,当您提供文档时,代码也被复制。 相比之下,加载项被附加到应用程序:启动Excel的那一刻,加载项就可以使用。 像求解器这样的工具是一个加载项。 请注意,可以使用VBA或使用VSTO编写加载项(也可以使用.NET编写UDF,但这是非典型的)。
何时使用什么
加载项与macros/ UDFs:如果你的function应该可以从任何工作簿访问,写一个加载项。
VSTO或没有VSTO:这是一个辩论的问题。 大多数熟悉“经典”VBA自动化的人不太喜欢VSTO,因为学习曲线有点陡峭。 如果您习惯使用.Net,这应该不是什么问题 – 但是与“正常”的.Net应用程序开发相比,VSTO有些古怪。
另请注意,如果您使用VSTO,则您的代码不能由用户编辑。 这可以说是可取的,但同时,Excel高级用户通常知道如何使用VBA和macros,并希望能够调整代码。 这可能导致有趣的讨论。
就个人而言,我通常使用VSTO来加载插件,一旦我看到很多逻辑/程序代码在VBA中进入macros,我就会使用它。 VSTO给我的是在Visual Studio中编写可testing代码的能力,以及涉及到繁重计算时的高性能代码。 使用VSTO的另一个原因是利用WPF来定制办公室。

使用Excel 2003及更早版本的VBA(尽pipe如果你愿意的话,你仍然可以在2007年使用它)。

VSTO适用于Excel 2003或2007。

旧的Excel 4.0macros语言绝对不能再使用,他们保持禁用部分,function正在消失。 我们不得不重写所有的电子表格来获取旧的macros。

macros也是VBA代码的另一个名字。

一个加载项只是另一个有工作簿的Excel工作簿(比如VBA),这样你就可以在不同的书中使用这些代码,并将代码直接保存在用户的书籍之外。

一个UDF只是一个用VBA编写的函数,在电子表格的一个单元格中它可以被称为工作表函数(它也可以存储在一个加载项中)。

兰斯对你的问题有很好的定义。 就什么时候使用而言,VBA vs VSTO – 如果您需要使用.net框架,请使用VSTO。 例如,我想用电子表格来制作一个VB.net程序界面,学习VSTO将会是一个很好的select(而且vba没有像vb.net那样的数组。 但是,如果你正在制作一个漂亮的电子表格,将为最终用户(公式,图表等)做一些很酷的事情,只需在电子表格中添加一些VBA代码即可。 这一切都取决于你必须做什么。 这个工作的最佳工具。

从VBA方面的几点来看:

加载项 – 所有非平凡的代码都应该放在加载项中。 对于我来说,一个典型的项目包含一个包含所有代码的插件,一个数据存储(数据库,文本文件,Excel工作簿)以保存数据,以及一个或多个模板作为表示层或用户界面。 您不必使用加载项; 代码将在您的模板中的模块中工作得很好。 不过,将项目图层分开是一个很好的做法。 代码放在加载项中,数据放在数据存储区中,演示文稿则放在工作簿或工作簿中。 这样,您可以更改您的代码,而不会影响其他两个图层。 或者您可以更改演示文稿模板而不影响现有数据。

UDF – 这是用Function关键字声明的。 如果您需要返回单个值(或数组或对象实例等),请使用函数。 自定义工作表函数是UDF,因为它们只将值返回给单元格。 除Value属性外,它们不会更改单元格的任何属性。 例如,您不能使用边框或字体。

macros – 也称为过程,它们用Sub关键字声明。 如果您需要执行除返回值之外的其他操作,请使用过程,例如如果需要操作Excel对象模型的某些部分。