UDF,宏,加载项,自动化加载项,XLL或VSTO之间的Excel编程有何不同。
我应该使用哪一个以及在哪种情况下?
答案 0 :(得分:8)
我会尝试分组/反对你提到的一些元素:
VSTO与VBA :
VBA(应用程序的visual basic)是编写Office自动化的“经典”方式。 Excel有一个开发界面,你可以从办公室开始编写宏和UDF,并且大约10年没有改变。从好的方面来说,部署是微不足道的,VBA提供了很好的功能,如宏录制,可以将您的操作记录到代码中,并提供了一种很好的方法来确定对象模型。
VSTO最近才出现,并允许您使用.NET自动化办公室(使用COM)。您可以利用所有.NET和Visual Studio(例如:添加WPF表单),这提供了很大的灵活性,但部署更复杂
UDF与宏与加载项的对比
用户定义的函数是定制的方法,它们将保留在工作簿上;一旦添加获得与“内置”Excel函数相同的状态:您可以从工作表中调用它们,例如= MyFunction()
宏是与您的工作簿保持连接的程序。它们可以由用户直接调用,也可以附加到事件中(例如:选择工作表时,执行此操作)
加载项不附加到特定文档,而是附加到应用程序本身。通常,宏或UDF附加到工作簿:当您打开文档时,代码可供您使用,当您提供文档时,代码也会被复制。相比之下,加载项附加到应用程序:当您启动Excel时,加载项可供您使用。像Solver这样的工具是一个插件。请注意,可以使用VBA或使用VSTO编写加载项(您也可以在.NET中编写UDF,但它不典型)。
何时使用
加载项与宏/ UDF:如果您的功能可以从任何工作簿访问,请编写加载项
VSTO或没有VSTO:这是一个有争议的问题。大多数熟悉“经典”VBA自动化的人都不太喜欢VSTO,因为学习曲线有点陡峭。如果您习惯使用.Net,这应该不是一个问题 - 但与“普通”.Net应用程序开发相比,VSTO有些古怪。
另请注意,如果使用VSTO,则用户无法编辑您的代码。这可以说是可取的,但与此同时,Excel高级用户通常知道如何使用VBA和宏,并期望能够调整代码。这可以引发有趣的讨论
就个人而言,我通常使用VSTO作为加载项,一旦我看到很多逻辑/过程代码进入VBA中的宏,我就会使用它。 VSTO给我的是能够在Visual Studio中编写可测试代码,以及在涉及大量计算时编写高性能代码。使用VSTO的另一个原因是利用WPF来定制办公室。
答案 1 :(得分:4)
使用VBA for Excel 2003及更早版本(如果你愿意,你仍然可以在2007年使用它)。
VSTO适用于Excel 2003或2007。
旧的Excel 4.0宏语言绝对不应再使用,它们会一直禁用部件,功能正在消失。我们不得不重写所有电子表格以获取旧的宏。
宏也是VBA代码的另一个名称。
加载项只是另一个包含代码的Excel工作簿(如VBA),因此您可以使用不同书籍中的代码,并将代码直接保留在用户手册之外。
UDF只是一个用VBA编写的函数,它在电子表格的单元格中被称为工作表函数(它也可以存储在加载项中)。
答案 2 :(得分:1)
兰斯对你的问题有很好的定义。在使用什么时,VBA与VSTO - 如果你需要使用.net框架,请使用VSTO。例如,我想用电子表格制作一个VB.net程序界面学习VSTO将是要走的路(那个和vba没有像vb.net那样让我疯狂的array.sort)。但是,如果您正在制作一个漂亮的电子表格,为最终用户(公式,图表等)做一些很酷的事情,只需在电子表格中添加一些VBA代码即可。这一切都取决于你必须做什么。这项工作的最佳工具。
答案 3 :(得分:1)
VBA方面的其他几点:
加载项 - 所有非平凡的代码都应该放在加载项中。对我来说,一个典型的项目包括一个包含所有代码的加载项,一个用于存放数据的数据存储(数据库,文本文件,Excel工作簿),以及一个或多个模板作为表示层或用户界面。您不必使用加载项;代码将在模板中的模块中正常工作。但是,将项目图层分开是一种很好的做法。代码放在插件中,数据放在数据存储中,演示文稿放在工作簿或工作簿中。这样,您可以在不影响其他两个层的情况下更改代码。或者,您可以在不影响现有数据的情况下更改演示模板。
UDF - 使用Function关键字声明。如果需要返回单个值(或数组或对象实例等),请使用函数。自定义工作表函数是UDF,因为它们只向单元格返回值。除Value属性外,它们不会更改单元格的任何属性。例如,您无法通过函数应用边框或字体。
宏 - 也称为过程,它们使用Sub关键字声明。如果您需要执行除返回值之外的操作,请使用过程,例如,如果您需要操作Excel对象模型的某些部分。