私は同じ問題が発生した場所をread Excel VBA macros and functions through csharpできたウェブサイトの助けを借りてそれを解決しました。私はいくつかの変更を加え、以下に示す解決策を考え出しました。私は利用可能なマクロと、最初に作成されたときに得た説明でリストを受け取ります。私は説明を解析するために正規表現を使用します。これのためのいくつかのよりよい解決策かもしれないが、少なくともそれは私の目的のために働く。
public List<Tuple<string,string>> GetAllMacrosInExcelFile(string fileName) {
List<Tuple<string,string>> listOfMacros = new List<Tuple<string,string>>();
var excel = new Excel.Application();
var workbook = excel.Workbooks.Open(fileName, false, true, Type.Missing, Type.Missing, Type.Missing, true, Type.Missing, Type.Missing, false, false, Type.Missing, false, true, Type.Missing);
var project = workbook.VBProject;
var projectName = project.Name;
var procedureType = Microsoft.Vbe.Interop.vbext_ProcKind.vbext_pk_Proc;
foreach (var component in project.VBComponents) {
VBA.VBComponent vbComponent = component as VBA.VBComponent;
if (vbComponent != null) {
string componentName = vbComponent.Name;
var componentCode = vbComponent.CodeModule;
int componentCodeLines = componentCode.CountOfLines;
int line = 1;
while (line < componentCodeLines) {
string procedureName = componentCode.get_ProcOfLine(line, out procedureType);
if (procedureName != string.Empty) {
int procedureLines = componentCode.get_ProcCountLines(procedureName, procedureType);
int procedureStartLine = componentCode.get_ProcStartLine(procedureName, procedureType);
var allCodeLines = componentCode.get_Lines(procedureStartLine, procedureLines);
Regex regex = new Regex("Macro\r\n' (.*?)\r\n'\r\n\r\n'");
var v = regex.Match(allCodeLines);
string comments = v.Groups[1].ToString();
if (comments.IsEmpty()) { comments = "No comment is written for this Macro"; }
line += procedureLines - 1;
listOfMacros.Add(procedureName.Tuple(comments));
}
line++;
}
}
}
excel.Quit();
return listOfMacros;
}
「マクロの説明」とはどういう意味ですか?そして、 "通常のVBA関数を除外しますか?" –
マクロを記録するときに、そのマクロに説明を割り当てることができます。通常の機能については、手作りのVBA機能を参照しています。私はこれらのマクロと記録されたマクロを区別する必要があります。 – wpfwannabe
@Jean:投票に感謝します。遠隔地でも知り合いであれば、Excelマクロをプログラムで操作することは自明ではありません。あなたがExcelを知っているなら、マクロには説明があることも知っています。 「マクロ記述の入手方法」を聞くことにどれだけの努力を払う必要がありますか?私はあまりにも少ない単語を補うために事実を補うことはできません。あなたは私を悪く見せますが、それはあなたの権利です。 – wpfwannabe