【发布时间】:2012-11-17 23:54:42
【问题描述】:
应我老板的要求,我创建了一组脚本,用于定期监控某些设备和进程的状态。该信息随后使用相对复杂的 VBA 模块进行处理,该模块收集所有信息、应用公式、设置范围和生成图表等。
但是有两个问题: 我是一个业余程序员,所以我的 VBA 程序效率很低。这对我来说不是什么大问题(我只是在它运行的时候起床喝杯咖啡),但对于其他用户来说,这可能会很麻烦,因为那时不知道为什么要花这么长时间。我想要进度的图形表示。 应用程序的配置是通过文本文件完成的。我想提供一个不错的 GUI 来设置配置。
为了实现这一点,我正在寻找一种方法让我的 C# WinForms 应用程序与我的 VBA 应用程序进行通信。我知道如何从我的 C# 应用程序运行 VBA 例程,但我不知道如何让它们实时通信。
以下是我特别想要实现的两件事:
- 我已经有一个日志文件保存在 VBA 例程的末尾。 但是,我想将日志/调试消息发送到 我的 C# 应用程序实时(不只是在结束时 应用程序),因此消息可以显示在我的 GUI 应用程序中,因为它们 由 VBA 应用程序生成。
- 我还希望 VBA 应用程序发送信息 关于我的 GUI 应用程序的实时进度,所以我可以创建一个图形 我的 GUI 应用中的进度条。
我已经考虑过通过标准输出进行通信。我知道如何使用 C#/.Net 从标准输出读取数据,但我不确定如何使用 VBA 写入 StdOut 流。
我敢肯定很多人会指出我想要实现的目标是愚蠢和过时的(或完全没有必要),但作为一个业余程序员,这对我来说似乎是一个非常具有挑战性和有趣的项目,可以教我有一两件事。
【问题讨论】:
-
我建议您花时间改进 VBA 应用程序。此外,没有理由你不能做进度条和登录 VBA。如果不需要,为什么还要引入额外的复杂性?
-
嗯,首先,我认为我无法创建更快或更高效的应用程序,因为我已经使用了我所有的 VBA 知识。正如我所说,我是一个绝对的业余爱好者。第二:我希望“Excel 层”在工作簿完全生成之前是不可见的。第三:我在 VBA 中创建表单的经验也绝对为零,而我在 C# 中确实有一些经验。第四:正如我所说,这似乎是一件非常非常有趣/有趣的事情。
-
我不明白你是怎么走到这样一个境地的,你学会了 C# 中的表单编程,但是 VBA 中的“其他”编程?让所有这些在一个平台或另一个平台上运行不是更有意义吗?我建议让它全部在 C# 中运行,因为它是较新的技术。但是,如果它只是需要构建一个完整的 VBA 项目的表单,那么 VBA 中的表单确实非常简单。当您遇到困难时,请尝试提问。这比尝试在 VBA 之间引发事件并将它们放入 .Net 中要简单得多
-
@ElectricLlama 我用 VBA 所做的几乎所有事情最终都链接到一个会定期执行的脚本。我从来没有做过任何需要大量用户交互的事情。也就是说,正如我在最初的问题中指出的那样,我完全理解您对我的问题的担忧。
-
你是说VBA真的只是另一个脚本的外壳吗?如果是这种情况,您应该从 C# 调用脚本。或者你为什么不改变你的 C# 前端以定期轮询日志文件并以这种方式显示状态栏。
标签: c# .net vba interop office-interop