如果您要编写功能相同的程序,我很好奇两者的性能比较。我正在做一个项目,在这个项目中,考虑到我需要在VBA中进行比较的功能,我开始认为插件更合适。

最佳答案

取决于这些程序的功能以及它们的执行方式。

VSTO /.net比VBA快,可以让您编写在多个线程上运行的代码。但是Excel是COM,最终所有内容都需要进入STA(单线程公寓)管道,并且托管(.net)代码通过COM Interop与COM进行通信,即,它通过Primary Interop Assembly与Excel进行通信,这比“原生” VBA。

换一种说法:


您的程序进行了大量处理,只有很少的电子表格读/写,请转到VSTO。
您的程序进行了大量电子表格交互,请使用VBA。电子表格交互几乎是VBA可以做的最慢的事情,但是使用VSTO进行交互将更加痛苦,因为所有事情都需要从托管代码到COM进行处理。


最好的混合解决方案是:在VBA中公开用户定义的函数,然后将VBA代码调用到引用的COM可见.net DLL中,该DLL甚至无需使用Excel互操作程序集即可进行实际计算。

编写良好的VBA代码也可以胜过等效的VSTO代码。


我开始认为,鉴于我需要在VBA中进行比较的功能,外接程序可能更合适。


您也可以在VBA中编写Excel加载项。涉及的技术越少,彼此之间进行交流的需求就越少;归根结底,您对许多事物的重视程度之间是平衡的,并且可能会根据您的要求,环境和经验而有所不同:


性能-哪种解决方案效果最佳?
可维护性-哪种解决方案最容易维护?
部署-哪种解决方案最容易更新和部署?
源代码控制-Visual Studio钩接到Team Frustration Foundation Server和Git; VBE可以使用Rubberduck(我的一个小小的宠物项目)来做Git,但是最新版本仍然是beta版,并且有点不稳定(尽管它是开源的,所以如果您知道C#,则可以做出贡献并帮助稳定它)。
单元测试-Visual Studio使编写和运行单元测试变得容易; VBE可以对Rubberduck进行相同的操作,但是如果没有VBE外接程序,则必须诉诸即席测试,或者以编程方式访问VBIDE API并使用基于VBA的单元测试框架。

关于excel - VSTO加载项与VBA性能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37924152/

10-10 18:50
查看更多