如果我在 Visual Studio 中开发 Excel 应用程序,我会失去宏录制的好处吗?

Posted

技术标签:

【中文标题】如果我在 Visual Studio 中开发 Excel 应用程序,我会失去宏录制的好处吗?【英文标题】:Do I lose the benefits of macro recording if I develop Excel apps in Visual Studio? 【发布时间】:2010-03-16 23:25:42 【问题描述】:

我过去使用以下开发过程编写了很多 Excel 宏:

    录制宏。 打开 VBA 编辑器。 编辑宏。

我现在正在试验一个 Visual Studio 2008“Excel 2007 插件”项目 (C#),我想知道我是否必须放弃这个开发过程。

问题:

    我知道我仍然可以使用 Excel 记录宏,但有没有办法在 Visual Studio 中访问生成的代码?还是我只需要复制和粘贴然后 C# 化它?

    我的“个人宏工作簿”会怎样?我可以使用我在 C# 中存储的宏吗?或者有什么方法可以将它们转换为 C#?

    如果对在 Visual Studio 中打开和编辑 VBA 宏有一些支持,您能否提供一个非常简短的关于其工作原理的摘要或给我一个好的参考?

    对于从使用 Excel 的内置编辑器在 VBA 中编写宏过渡到使用 Visual Studio 在 C# 中编写宏,您还有其他提示吗?

【问题讨论】:

如果您要使用 VBA 中的 C#,则必须对您的 VBA 进行 C-sharp-ify。如果您改用 VB.NET,您仍然需要对原始 VBA 进行一些小的调整。您仍然可以在工作簿特定的解决方案中使用 VBA - 虽然我不确定果汁是否值得挤压。 【参考方案1】:

如果您想将 VBA 宏移植到 C#,那么您将面临一个痛苦的世界。如果它们很复杂,我会在 Visual Studio 中重写它们或将它们保留在 Excel 中。

另外,尽管这么说让我很痛苦,但 VB.net 确实是目前进行办公室开发的更好选择。 VB.net 支持 missing 参数,这对于具有无数参数的 Excel 方法将派上用场。此支持将添加到 .NET 4.0 的 C# 中。

您应该能够从 .NET 调用 VBA 方法。看看这个: http://msdn.microsoft.com/en-us/library/bb608609.aspx

你也可以看看codeproject上的这篇文章:http://www.codeproject.com/KB/office/extending_excel.aspx

【讨论】:

谢谢,斯科特。在升级到 Visual Studio 2010 之前,您说服我坚持使用 VBA。 很高兴为您提供帮助。我想你会对这个决定感到高兴。反正等的时间也不长……【参考方案2】:

(免责声明:我开发了 Excel-DNA 库。)

您应该看看 Excel-DNA - http://exceldna.codeplex.com。该库允许用 C#、VB.NET 或 F# 编写的托管程序集通过 Excel 的本机 .xll 接口向 Excel 公开高性能用户定义函数 (UDF) 和宏。该项目是开源的,可以免费用于商业用途。

凭借您的 VBA 背景,首先使用 VB.NET 迁移到 .NET 可能是有意义的。一旦你完成了这种转变,开始使用 C# 会容易得多,而且你可以毫无问题地交叉引用用 VB.NET 和 C# 编写的程序集。

ReSharper 和免费的 .NET IDE SharpDevelop 等一些插件工具甚至可以自动将代码从 VB.NET 转换为 C#。当然对于使用 C# 中的 COM 自动化接口,您要使用 .NET 4。

Mike Staunton 在这里有一段关于 VBA -> VB.NET via Excel-DNA 技术的讨论视频:http://www.thalesians.com/finance/index.php/Events/Seminars/Seminar27#Video。

【讨论】:

以上是关于如果我在 Visual Studio 中开发 Excel 应用程序,我会失去宏录制的好处吗?的主要内容,如果未能解决你的问题,请参考以下文章

静态代码分析器:非托管C ++ Visual Studio 2008

如何在 Visual Studio 2010 中使用 Visual Studio 2008 创建的 DLL?

用Visual Studio .Net开发的一个小网站,怎么在局域网中发布呢?

Visual Studio 在调试模式下禁用 TRACE

visual studio 和visual studio code 的区别

Visual Studio 找不到实体框架