【问题标题】:Get all the VBA macros of a workbook by VSTO通过 VSTO 获取工作簿的所有 VBA 宏
【发布时间】:2016-09-01 14:08:56
【问题描述】:

在 VBA 中,我们可以使用例如 Wb.VBProject.VBComponents 来获取工作簿 Wb 的所有 VBA 宏。

有谁知道 VSTO 是否提供任何对象或函数来访问它?

编辑1:按照吉姆的回答,我得到以下错误:

【问题讨论】:

    标签: ms-office vsto office-addins excel-addins


    【解决方案1】:

    您需要在项目中添加对Microsoft.Vbe.Interop 的引用。然后你可以使用

    Imports Microsoft.Vbe.Interop
    

    。 .

    Dim components As VBComponents =  Application.ActiveWorkbook.VBProject.VBComponents
    

    Dim components As VBComponents = Globals.ThisAddIn.Application.ActiveWorkbook.VBProject.VBComponents
    

    然后

    For Each comp As VBComponent In components
    
    Next
    

    编辑:

    我在 C# 中创建了以下方法来获取宏列表并将它们添加到 List<string>

    private static void GetMacros()
    {
        int startLine = 0;
        vbext_ProcKind ProcKind;
        List<string> macros = new List<string>();
    
        VBComponents components = Globals.ThisAddIn.Application.ActiveWorkbook.VBProject.VBComponents;
        try
        {
            foreach (VBComponent comp in components)
            {
                startLine = comp.CodeModule.CountOfDeclarationLines + 1;
                while (startLine <= comp.CodeModule.CountOfLines)
                {
                    string macroName = comp.CodeModule.get_ProcOfLine(startLine, out ProcKind);
                    macros.Add(macroName);
                    startLine += comp.CodeModule.get_ProcCountLines(macroName, ProcKind);
                }
            }
        }
        catch (Exception)
        {
            throw;
        }
    }
    

    【讨论】:

    • 感谢您的回答。但是Dim components As VBComponents = Application.ActiveWorkbook.VBProject.VBComponents 是 VBA 语句,对吧?请查看 OP 中的更新...如何添加对程序集 Microsoft.Vbe.Interop...的引用?
    • 您似乎尝试在加载项 Startup 事件中执行此操作。 ActiveWorkbook 此时将不可用。我实际上构建了一个加载项并使用按钮单击事件对此进行了测试。您可能希望在工作簿打开后执行此操作。也许在工作簿Startup 事件中。
    • 您应该可以从项目中添加引用。
    • 实际上,我现在可以添加引用,因此构建不会为VBComponents components = Application.ActiveWorkbook.VBProject.VBComponents; 引发任何错误。我正在研究如何从components 获取 VBA 代码。
    • @SoftTimur - 我用 C# 方法更新了我的答案以检索宏列表。它将宏名称添加到List&lt;string&gt;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多