0
VBAでは、Wb.VBProject.VBComponentsなどを使用して、ワークブックWb
のすべてのVBAマクロを取得できます。VSTOでワークブックのすべてのVBAマクロを取得
VSTOがそのオブジェクトにアクセスするためのオブジェクトまたは機能を提供するかどうかは誰にも分かりますか?
編集1:ジムの答えに続いて、私は次のエラーを持っている:
VBAでは、Wb.VBProject.VBComponentsなどを使用して、ワークブックWb
のすべてのVBAマクロを取得できます。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
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
アドインの「スタートアップ」イベントでこれを実行しようとしたようです。 'ActiveWorkbook'はこの時点では利用できません。私は実際にアドインを構築し、これをボタンクリックイベントを使ってテストしました。ワークブックが開いたら、これを実行することをお勧めします。おそらくワークブック[スタートアップ](https://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.workbook.startup.aspx)のイベントです。 –
プロジェクトから参照を追加できるはずです。 –