【问题标题】:Is there a way to add vba macro code to excel?有没有办法将vba宏代码添加到excel?
【发布时间】:2013-02-18 05:52:11
【问题描述】:

我对现有的宏函数有问题,所以我要做的就是将宏传递给 excel 我的意思是将函数(例如:a())添加到 excel,然后运行函数(“a() ") 添加。

注意:我有 excel 的路径,我必须在其中添加宏。请清楚答案。

如何做到这一点??

提前致谢。

【问题讨论】:

  • 我有一个关于 Access 的类似问题。 Excel 的工作方式几乎相同,只是您可以直接从 _Workbook 对象访问 VBProject,您应该能够在此处获得所需的内容:stackoverflow.com/questions/13020923/… 我在答案下方写出了我使用的代码。
  • @Middas:感谢您的回答。如何将宏功能添加到现有模块?

标签: c# excel vba


【解决方案1】:
  • 为您的 Office 版本安装可再发行主互操作程序集
  • 添加对程序集的引用 -> 扩展 ->Microsoft.Office.Interop.Excel 和 Microsoft.VBE.Interop

    using System;
    using System.Diagnostics;
    using System.Windows.Forms;
    using Microsoft.Vbe.Interop;
    using ExcelInterop = Microsoft.Office.Interop.Excel;
    
    namespace WindowsFormsApplication1
    {
        public partial class AddExcelMacro : Form
        {
            public AddExcelMacro()
            {
                InitializeComponent();
                AddMacro();
            }
    
            public void AddMacro()
            {
                try
                {
                    // open excel file 
                    const string excelFile = @"c:\temp\VBA\test.xlsm";
                    var excelApplication = new ExcelInterop.Application { Visible = true };
                    var targetExcelFile = excelApplication.Workbooks.Open(excelFile);
    
                    // add standart module to file
                    var newStandardModule = targetExcelFile.VBProject.VBComponents.Add(vbext_ComponentType.vbext_ct_StdModule);
                    var codeModule = newStandardModule.CodeModule;
    
                    // add vba code to module
                    var lineNum = codeModule.CountOfLines + 1;
                    var macroName = "Button1_Click";
                    var codeText = "Public Sub " + macroName +"()" + "\r\n";
                    codeText += "  MsgBox \"Hi from Excel\"" + "\r\n";
                    codeText += "End Sub";
    
                    codeModule.InsertLines(lineNum, codeText);
                    targetExcelFile.Save();
    
                    // run the macro
                    var macro = string.Format("{0}!{1}.{2}", targetExcelFile.Name, newStandardModule.Name, macroName);
                    excelApplication.Run(macro);
    
                    excelApplication.Quit();
    
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex.Message);
                    throw;
                }
            }
        }
    }
    

【讨论】:

  • 丹尼尔:谢谢你的回答。我没明白这一点 添加对程序集的引用 -> 扩展 ->Microsoft.Office.Interop.Excel 和 Microsoft.VBE.Interop”(第二点)。
  • 丹尼尔:对不起,我已经接受了答案。现在请告诉我你提到的是什么。我已经安装了 PIA。
  • 可以t we just add macro,without installing PIAs 和其他东西吗?我认为它s hectic,and im 不确定我是否也必须在服务器中安装它。
  • 如果您想从 c# 将宏代码添加到 excel 文件,您必须为您的 office 版本安装 Primary Interop Assemblies Redistributable。看看这里:microsoft.com/en-us/download/details.aspx?id=3508。之后,在您的 c# 项目中添加对 Microsoft.Office.Interop.Excel 和 Microsoft.VBE.Interop 的引用。这对你来说可以理解吗?我的英语不好:-)。
  • Daniel: 不,你的英语非常好。你的意思是说我必须手动下载这些?
猜你喜欢
  • 2022-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-13
  • 2014-06-17
  • 2018-11-28
  • 1970-01-01
相关资源
最近更新 更多