0
在VBA中,我们可以使用例如Wb.VBProject.VBComponents来获取工作簿的所有VBA宏Wb
。VSTO获取工作簿的所有VBA宏
有谁知道VSTO是否提供任何对象或函数来访问?
编辑1:继吉姆的回答,我有以下错误:
在VBA中,我们可以使用例如Wb.VBProject.VBComponents来获取工作簿的所有VBA宏Wb
。VSTO获取工作簿的所有VBA宏
有谁知道VSTO是否提供任何对象或函数来访问?
编辑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 ...? – SoftTimur
看起来你尝试在加载项“启动”事件中执行此操作。此时“ActiveWorkbook”不可用。我实际上构建了一个加载项,并通过使用按钮单击事件对其进行了测试。在工作簿打开后,您可能会想要这样做。也许在工作簿[启动](https://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.workbook.startup.aspx)事件中。 –
您应该可以添加项目的参考。 –