c# - 使用 C# 对 Excel 工作表运行 VBA 宏

标签 c# wpf excel vba

是否可以编写一个 WPF C# 应用程序,该应用程序可以从单独的文本文件加载和读取 VBA 宏、打开现有的 Excel 工作簿并对其处理 VBA 宏?

我并不是试图将 VBA 转换为 C# 或从 C# 生成 VBA。应用程序、VBA 宏文本文件(VBA 被提取并单独保存在文本文件中)和 Excel 都是由不同的人单独编写/生成的。

应用程序加载并读取包含 VBA 的文本文件,然后打开现有的 Excel 文件并通过将宏注入(inject)到 Excel 来对其运行宏,或者更好的是,让工作簿中不包含宏。

我不知道如何或从哪里开始,或者是否可能。我在SO上找到的衣柜是Injecting vba macro code into excel using .net但似乎没有帮助。我正在寻找任何帮助我开始的建议,我将在这里分享和更新我的进展。

最佳答案

以下是在 VBA 中从文件添加一些 VBA 的方法(使其适应 C# 应该不难,但我对 C# 语法不够熟悉):

Function Insert_VBACode(ByRef oWB As Workbook)
    Dim oVBP As VBProject   ' VB Project Object
    Dim oVBC As VBComponent ' VB Component Object
    On Error GoTo Err_VBP
    Set oVBP = oWB.VBProject
    Set oVBC = oVBP.VBComponents.Add(vbext_ct_StdModule)
    oVBC.CodeModule.AddFromFile "c:\VBADUD\Templates\MSample.bas"
    oWB.Application.Run "'" & oWB.name & "'!SayHello"
    oWB.Save
End Function

[Source] (如果您想添加我在此处删除的任何错误处理以提高可读性,请查看那里)。
您还可以打开工作簿,而不是将其作为函数的参数。

然后,您可以通过此 walkthrough 从 C# 调用导入的宏。来自 MSDN。

关于c# - 使用 C# 对 Excel 工作表运行 VBA 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7567751/

相关文章:

c# - ASP.NET Web Api OData v4 - 如何通过 $metadata 反射(reflect)小数位数和精度?

c# - 尝试将 xml 文件转换为对象

c# - 运行异步匿名函数的任务中的返回类型?

c# - 每当有 UI 交互时,如何防止 CommandManager 调用 CanExecute?

c# - 如何在 WPF Canvas 上绘制矩形

excel - 如何在更改数据格式的同时加入列的所有文本?

Excel——显示从今天起 X 个月的日期

c# - 如何获取响应 WebResponse C# 的服务器的 IP 地址

c# - 将 TextBox 的文本绑定(bind)到 list<T> 值的总和

vba - VBA 中的 With block 中有超过 1 个单元格范围