2

我需要您的帮助来确定可供选择的最佳策略和技术,以继续开发成功的内部 VBA 应用程序。

在我们公司(基于网络的财务信息分销商),多年来,我们开发了一个 VBA XLA 插件应用程序,仅在我们公司内部使用,它有助于将我们的财务信息数据库与 Excel 工作表链接,通过使用几个 UDF,由 ADO/SQL 和其他业务对象逻辑支持。这个应用程序对我们来说是一个可靠、快速和有用的工具,有点类似于旧的 DDE 链接,但比这更复杂和灵活。

最近,我们用基于 SOAP 的 Web 服务和 XMLHTTP MSXML 6.0 技术替换了系统的 ADO/SQL 部分,真正将我们的数据库放到了云中。目标是将应用程序转变为可以在我们公司之外使用的产品。这项工作已经完成,它的表现非常好,具有所有功能、启动时加载、用户身份验证和会话控制登录/注销、与 EXCEL 的无缝集成、用户友好的消息,所有这些都在一个 2.036Kb XLA 插件中完成文件,跨越 15.000 多行良好的 VBA 代码。但是,我们觉得它还不能像现在这样分发......

我们认为,为了成功地作为产品发布给我们的客户,这个应用程序必须转换为编译代码而不是解释的 VBA。有很多理由证明这样做是合理的,包括安全性、速度、稳健性等。但我们现在不需要深入这些细节。

我们的第一个想法是使用 VB6 和自动化设计器将我们的 VBA 代码快速转换为 VB6 自动化插件。除了 VB6 是老技术之外,自动化插件似乎不是理想的解决方案,因为我们的应用程序需要与 Excel 事件和最终用户进行一些交互,至少在“登录”和“注销”期间基于 Web 服务的数据库(以及其他一些需要通过表单进行用户交互的功能),但似乎自动化插件不适合 UDF 以外的任何东西。在这里,我们想了解其他人在自动化插件和最终用户交互方面的经验。

因此,COM 插件是下一个选择。同样,这些允许通过菜单按钮和命令进行交互,但不允许在工作表中使用 UDF。或者我们已经读过。此外,我们已经读到 COM 插件可以作为自动化插件(毕竟允许 UDF),但它们将作为 Excel 环境中的两个独立实体(一个 COM 和一个插件),一半不与对方交流。这是我们不能接受的。同样,我们想更多地了解其他人在这方面的经验。

然后是托管代码(.NET、Interop 和 VSTO)作为其他可行的选项。然而,虽然上手简单,但 Interop 是否会继续存在尚不清楚,也不清楚托管代码的最佳策略是什么。同样,我们想了解其他人在这个领域的经验。

所以,最后的问题是:考虑到我们的要求(即启动时加载、通过基于 SOAP 的 Web 服务(MSXML 6.0)访问数据、UDF 的功能、登录/注销会话控制、用户友好的错误处理等),以及我们已经拥有 15.000 行良好的 VBA 代码这一事实,这是我们继续开发此 Excel 组件以使其成为易于安全分发的产品的最佳技术吗?非常欢迎这方面的所有评论和想法。

4

2 回答 2

2

您的项目的精彩总结。

我也很好奇其他人对此类任务的“正确”解决方案有何看法。不过,这不会是一个容易的决定。

我的简短回答是“坚持使用 VBA”,除非您真的担心从出色的 VBA 插件中窃取您的代码。

我选择 VBA 的原因是,我使用 VSTO/COM 的时间越长,我发现 VBA 最适合处理与 Excel(了解 MS Office)对象模型密切相关的任务。我的意思是,即使我在过去 4 年中编写了几乎零行的 VBA 代码。我确实了解您正在使用 Web 服务和其他依赖项,但我想说,如果您取得了良好的进展并且插件按预期工作,我不会将自己投入到一个全新的开发世界(VSTO 和 C#)中冷静点,你不会获得太多的价值,特别是如果你知道

  • 部署托管代码比将加载项复制到文件夹、设置注册表、完成
  • 使用托管代码进行故障排除是一种更难的方式,基本上您将不得不记录更多内容并尝试重现可能不会在您的环境中发生但在客户端中发生的问题
  • 托管代码的重新设计并不难,所以如果人们真的想窃取您的代码,他们可以这样做,除非您使用混淆
  • 最后一个,可能对你来说最重要的,据我所知,在 VSTO 中做 UDF 没有简单的方法

我对 VB6/COM 自动化的经验非常少,所以我很想听听以前做过类似事情的人的意见

回复:VSTO 和 UDF,在我的工作中,我们有一个 VSTO 插件,它以某种方式处理大型项目的 UDF。我不是该应用程序的主要开发人员,但我相信我们在那里使用Excel DNA,因此请检查它以进一步探索托管代码选项

希望有帮助

于 2017-09-13T15:39:49.947 回答
2

我会看看 Excel DNA:https ://github.com/Excel-DNA

我在开发与 ASP.Net Web API 通信的 VBA 插件时遇到了非常相似的问题。无法真正在 VBA 中提供所有代码,因此我们需要一种提供已编译代码的方法。连接到 Web 服务会冻结 excel,使用户更难处理具有多个 API 调用的大量电子表格。

您可以使用 VB 在 Visual Studio 中轻松开发它们,因此可以复制和粘贴大量代码,然后稍作更改以适应您正在使用的 VB 的更高版本。

加载项编译为 .xll 64 位和 32 位版本。

我们在功能区中处理所有登录和与 API 的连接:https ://exceldna.codeplex.com/wikipage?title=Ribbon%20Customization&referringTitle=Documentation

您可以使用更新的 VB 表单,这些表单对用户更友好。

连接到其他 .dll 文件以跨多个加载项共享逻辑。

我们使用的调用 API 的 UDF 都可以异步运行,从而释放 Excel 的主线程。 https://exceldna.codeplex.com/wikipage?title=Asynchronous%20Functions&referringTitle=Documentation

它可以通过作为宏排队来运行任何 VBA 特定或 CAPI 代码。

几乎可以完成您在 VBA 中可以做的所有事情以及更多。

Govert 开发人员https://stackoverflow.com/users/44264/govert在 StackOverflow 和论坛上非常活跃。他帮助我们完成了开发工作。Excel DNA 仍在更新和开发中。

如果您想了解更多详细信息,请告诉我。

于 2017-10-27T13:54:21.260 回答