Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA和VSTO有什么区别,我应该升级吗?_Excel_Vba_Ide_Vsto - Fatal编程技术网

Excel VBA和VSTO有什么区别,我应该升级吗?

Excel VBA和VSTO有什么区别,我应该升级吗?,excel,vba,ide,vsto,Excel,Vba,Ide,Vsto,我是KISS原则(保持简单)的超级粉丝,也是excel用户的长期VBA。然而,我能找到的所有关于VBA与VSTO(VisualStudioToolsforOffice)的文章似乎都非常复杂 首先,我厌倦了Excel内置的非常糟糕的IDE,我正在寻找一个新的IDE。使用VisualStudio作为IDE的VSTO似乎是唯一的选择 因此,我试图了解VBA和VSTO之间的区别,以了解是否值得我学习使用VSTO 您使用哪种工具集在很大程度上取决于个人喜好,但这里有一些事情需要考虑:1。性能:对于大多数与

我是KISS原则(保持简单)的超级粉丝,也是excel用户的长期VBA。然而,我能找到的所有关于VBA与VSTO(VisualStudioToolsforOffice)的文章似乎都非常复杂

首先,我厌倦了Excel内置的非常糟糕的IDE,我正在寻找一个新的IDE。使用VisualStudio作为IDE的VSTO似乎是唯一的选择


因此,我试图了解VBA和VSTO之间的区别,以了解是否值得我学习使用VSTO

您使用哪种工具集在很大程度上取决于个人喜好,但这里有一些事情需要考虑:
1。性能:对于大多数与Excel相关的任务,由于额外的互操作层,VSTO的执行速度比VBA慢。
2。自定义项:VSTO不支持自定义项
3。对象模型:使用VSTO处理Excel对象模型比使用VBA更难,因为没有.NET宏记录器提供提示。
4。IDE:使用VSTO,您可以访问最新的Visual Studio IDE(假设您拥有Visual Studio许可证)
5。Net Framework:VSTO使您能够访问非常丰富和强大的.Net Framework
6。学习曲线:VB.NET与VBA是一种不同的语言,.NET框架和对象模型的差异意味着转换并不像可能的那么简单。
7。如果您想使用visual studio/.NET路径,我建议您使用Addin Express或XLDNA,而不是VSTO:这两种方法的限制都比VSTO小。Excel中的VBA具有在编辑代码和运行代码之间获得快速结果的优势。因为你是一个优秀的VBA程序员,你可以不用Visual Studio的超级功能(intellisense、try catch Fanaly、inherits、every.NET对象、多线程…)

VSTO是在一个非常好的IDE(Visual Studio)中工作的一种方法,但我担心在VB.NET和Excel之间切换会浪费很多时间。它不像Excel中的VBA那样直接

如果编程的主要目的是保存在Excel文件中,那么请使用VBA。如果你真的需要在Excel文件之外工作,或者如果你想做一些不需要依赖于Excel文件的事情,也许你可以考虑VSTO。此外,VSTO非常新,文档可能不完整

如果我是你,我会留在VBA。这是我的拙见。 我写了一些VBA和VB.NET(VSTO)之间的比较:
给你

这是最初提出这个问题的6年后,所以在OP的时候,这两个工具之间的比较可能是不同的,但我实际上非常惊讶现有的答案对VBA是多么有利

VBA完全在应用程序中进行解释和封装。这里的优点是:

  • 编码可以直接在应用程序中完成,不需要外部工具
  • 特定于应用程序的功能(如宏录制)可以实现快速原型制作
  • 您可以利用特定于Excel的ActiveX控件,如RefEdit
  • UDF可以很容易地开发
  • < > AdIn作为文档(.xLA格式)分发。
对于小型应用程序和UDF,VBA工作良好。您可以在Excel中快速、轻松地构建内容,并使其“正常工作”

但是,如果您的程序具有任何类型的复杂性,那么探索VSTO将是非常值得的。其优点包括:

  • 能够使用多种编程语言,如VB.NET或C#
  • 更好的集合支持(通用列表、字典、元组等)
  • 支持线程、异步执行
  • 将加载项部署为独立应用程序
  • 能够使用本机WinForms并开发非阻塞UI
VSTO在这一点上有很好的文档记录:


关于性能的话题相当模糊,但与前面的一些答案相比,这实际上取决于您的瓶颈。COM互操作性可能会增加开销,但同时VBA执行模型比C#提供的要慢得多。特别是当您考虑到编程VSTO可以提供的各种范例时,VSTO将比类似编码的VBA程序快几个数量级。您对VBA的回答让我非常惊讶

在VBA工作了几年(主要是outlook),我对各种消极方面感到厌烦,我现在转到VSTO,因为它效率更高

我遇到了许多不利因素:

发展

  • Vba IDE非常有限
  • 用户表单受到限制(尝试创建富文本框)
部署

  • 用户需要执行太多操作(修改安全设置、导入引用、修改功能区…)
更新

  • 无法自动更新,您需要为每次更新向用户发送新文件
外接程序的功能更加强大(我所说的“强大”是指更容易制作复杂的东西),可以在功能区中添加按钮以启动功能,并且更易于部署(请看ClickOnce)

通常,VBA宏是为个人使用而制作的,而VSTO应用程序是为分发而制作的,如您在此处所读:

如果您正在开发一个要分发给多人的解决方案,则应将VBA代码转换为Outlook COM或VSTO加载项或Outlook Office加载项


@David,这似乎很接近,但我认为称之为重复而不是重复是不公平的:将VB6与VBA进行比较与将VSTO/VB.NET与VBA进行比较毫无关系。最肯定的是,这不是重复!