【发布时间】:2016-09-01 14:08:56
【问题描述】:
在 VBA 中,我们可以使用例如 Wb.VBProject.VBComponents 来获取工作簿 Wb 的所有 VBA 宏。
有谁知道 VSTO 是否提供任何对象或函数来访问它?
编辑1:按照吉姆的回答,我得到以下错误:
【问题讨论】:
标签: ms-office vsto office-addins excel-addins
在 VBA 中,我们可以使用例如 Wb.VBProject.VBComponents 来获取工作簿 Wb 的所有 VBA 宏。
有谁知道 VSTO 是否提供任何对象或函数来访问它?
编辑1:按照吉姆的回答,我得到以下错误:
【问题讨论】:
标签: ms-office vsto office-addins excel-addins
您需要在项目中添加对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 代码。
List<string>。