Вы должны добавить ссылку на 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
EDIT:
Я создал следующий метод в 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
Похоже, вы пробовали это сделать в надстройке 'Startup'. На данный момент «ActiveWorkbook» не будет доступен. Я действительно создал надстройку и протестировал ее с помощью события нажатия кнопки. Вероятно, вы захотите сделать это после того, как рабочая книга будет открыта. Возможно, в событии Workbook [Startup] (https://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.workbook.startup.aspx). –
Вы должны иметь возможность добавить ссылку из проекта. –