编程语言
首页 > 编程语言> > 使用C#访问特定的VBA代码模块

使用C#访问特定的VBA代码模块

作者:互联网

我正在从模板创建工作簿.模板中已经包含必需的代码模块.我正在尝试引用其中一个代码模块,该代码需要导入其中(代码总是不同的,因此拥有.bas文件在这里将无法工作,因为会有数百个这样的代码模块).

我可以使用轻松访问新的代码模块

var codeModule = excelWorkbook.VBProject.VBComponents.Add(VBIDE.vbext_ComponentType.vbext_ct_StdModule);

但是我需要访问实例化工作簿变量中的现有“方法”代码模块

 //initialize the Excel application and make it invisible to the user.
        var excelApp = new Excel.Application
        {
            UserControl = false,
            Visible = false
        };

        //Create the Excel workbook and worksheet - and give the worksheet a name.
        var excelWorkbook = excelApp.Workbooks.Open(TemplateFilePath);
        excelWorkbook.Author = Acknowledgements.Author;
        var bookPath = excelWorkbook.Path;

        //add the macro code to the excel workbook here in the Methods module.
       //this adds a new module, how do I access an existing one?
        var codeModule = excelWorkbook.VBProject.VBComponents.Add(VBIDE.vbext_ComponentType.vbext_ct_StdModule);

我可以遍历模块并通过测试名称相等性来获取它,但是必须有一种方法可以在一行代码中检索它.

解决方法:

使用VBComponents集合的Item方法按名称或数字索引检索现有的VBComponent:

VBIDE.VBComponent component = excelWorkbook.VBProject.VBComponents.Item("Methods");
VBIDE.CodeModule module = component.CodeModule;

标签:c,excel,vba,excel-vba
来源: https://codeday.me/bug/20191118/2026086.html