23

我是 KISS 原则(保持简单)的忠实粉丝,也是 Excel 用户长期使用的 VBA。然而,我能找到的关于 VBA 与 VSTO(Visual Studio Tools for Office)的所有文章似乎都非常复杂。

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

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

4

4 回答 4

20

您使用哪种工具集很大程度上取决于个人喜好,但这里有一些需要考虑的事项:
1. 性能:对于大多数与 Excel 相关的任务,与 VBA 相比,VSTO 的执行速度非常慢,因为额外的互操作层。
2. UDF:VSTO 不支持 UDF
3. 对象模型:使用 VSTO 使用 Excel 对象模型比使用 VBA 更难,因为没有 .NET 宏记录器给您提示。
4. IDE:使用 VSTO,您可以访问最新的 Visual Studio IDE(假设您拥有 Visual Studio 许可证)
5. .Net Framework:VSTO 让您可以访问非常丰富和强大的 .NET 框架
6. 学习曲线:VB.NET 是与 VBA 不同的语言,.NET 框架和对象模型的差异意味着过渡并不像想象的那么简单。
7. 如果你想走 Visual Studio/.NET 路线,我建议你看看 Addin Express 或 XLDNA 而不是 VSTO:这两者的限制都比 VSTO 少

于 2013-05-28T10:55:31.390 回答
13

Excel 中的 VBA 为您提供了在编辑代码和运行代码之间快速获得结果的优势。因为您是一名优秀的 VBA 程序员,所以您可以不用 Visual Studio 的超级功能(智能感知、try-catch-fanally、继承、每个 .NET 对象、多线程......)

VSTO 是一种在非常好的 IDE (Visual Studio) 中工作的方法,但恐怕你会浪费大量时间在 VB.NET 和 Excel 之间切换。它不像 Excel 中的 VBA 那样直接。

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

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

于 2013-06-04T00:05:30.623 回答
5

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

VBA 被解释并完全包含在应用程序中。这里的优点是:

  • 编码可以直接在应用程序内完成,无需外部工具
  • 宏录制等特定于应用程序的功能可以实现快速原型设计
  • 您可以利用 Excel 特定的 ActiveX 控件,例如 RefEdit
  • UDF 可以轻松开发
  • 插件作为文档分发(.xla 格式)

对于小型应用程序和 UDF,VBA 可以正常工作。您可以在 Excel 中快速轻松地进行构建,并且一切都“正常工作”。

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

  • 能够使用多范式编程语言,如 VB.NET 或 C#
  • 更好的集合支持(通用列表、字典、元组等...)
  • 支持线程,异步执行
  • 将插件部署为独立应用程序
  • 能够使用本机 WinForms 和开发非阻塞 UI

VSTO 在这一点上有很好的记录:

https://docs.microsoft.com/en-us/visualstudio/vsto/create-vsto-add-ins-for-office-by-using-visual-studio

性能的主题相当模糊,但对比之前的一些答案,这真的取决于你的瓶颈。COM 互操作性可能会增加开销,但同时 VBA 执行模型比 C# 提供的模型要慢得多。特别是当您考虑到编程 VSTO 可以提供的各种范式时,三个应用程序的 VSTO 将比类似编码的 VBA 程序快几个数量级。

于 2019-06-13T17:27:03.750 回答
0

我对您对 VBA 的回答感到非常惊讶。

使用 VBA 工作了几年(主要是前景),我对各种负面方面感到厌烦,我正在转向 VSTO,因为它效率更高。

我遇到了很多负面的观点:

发展中

  • Vba IDE非常有限,
  • 用户表单有限(尝试制作富文本框)

部署

  • 用户需要执行太多操作(修改安全设置、导入参考、修改功能区...)

更新

  • 不能自动更新,每次更新都需要向用户发送新文件。

插件功能更强大(我的意思是更容易制作复杂的东西),可以向功能区添加按钮以启动功能并且更易于部署(看看 ClickOnce)。

通常,VBA 宏是供个人使用的,而 VSTO 应用程序是为了分发,您可以在此处阅读:

https://support.microsoft.com/en-us/help/290779/managing-and-distributing-outlook-visual-basic-for-vba

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

于 2020-01-03T08:19:34.293 回答