C# を使用して、既存の csv ファイルで既存の Excel マクロ (VB で記述され、マクロ エディターを使用して Excel からコピーできます) を実行する必要があります。次のような xlsm ファイルでマクロを実行するために使用できる作業コードが既にあります。
using System;
using Excel = Microsoft.Office.Interop.Excel;
namespace MacroBuddy
{
public class test
{
public static void go_Macro()
{
object oMissing = System.Reflection.Missing.Value;
//create new Excel application instance
Excel.Application oExcel = new Excel.Application();
oExcel.Visible = true;
Excel.Workbooks oBooks = oExcel.Workbooks;
Excel._Workbook oBook = null;
string path = @"C:\Users\user\Desktop\test.csv";
//open file located at path
oBook = oBooks.Open(path, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing);
//run Macro by referencing file and the name of the Macro
RunMacro(oExcel, new Object[] { "test.xlsm!TestMacro" });
//save and close workbook
oBook.Save();
oBook.Close(false, oMissing, oMissing);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oBook);
oBook = null;
System.Runtime.InteropServices.Marshal.ReleaseComObject(oBooks);
oBooks = null;
oExcel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel);
oExcel = null;
GC.Collect();
}
private static void RunMacro(object oApp, object[] oRunArgs)
{ oApp.GetType().InvokeMember("Run", System.Reflection.BindingFlags.Default | System.Reflection.BindingFlags.InvokeMethod, null, oApp, oRunArgs); }
static void Main()
{ go_Macro(); }
}
}
ただし、指定したファイルが csv ファイルの場合は機能しません。したがって、同様のコードを csv ファイルで機能させるか、csv ファイルを C# から xlsm ファイルに変換する自動化プロセスを作成するための支援が必要です。
また、VB マクロ コードを文字列として取得し、その文字列を引数として取得するメソッドまたは同様のプロセスを使用してマクロを実行できると便利です。