前提
・Microsoft Excel 12.0 Object Libraryを参照していること
(EPPlusではマクロの操作はできないため、COMを使用する)
・デスクトップにVBAコードが記載されたテキストファイル
「sampleMacro.txt」が存在すること
・Excel2007の場合、「Microsoft Office ボタン」-「Excelのオプション」-
「セキュリティ センター」-「セキュリティ センターの設定」-
「マクロの設定」-「VBA プロジェクト オブジェクト モデルへの
アクセスを信頼する」がチェック済みであること
サンプルプログラム
using Excel = Microsoft.Office.Interop.Excel;
using Microsoft.Vbe.Interop;
using System.Runtime.InteropServices;
(省略)
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Button1_Click(object sender, EventArgs e)
{
Excel.Application oExcel = null;
Excel.Workbook oBook = null;
Excel.Workbooks oBooks = null;
VBComponent MyModule = null;
string fileName = null;
//Excelのインスタンスを作成
oExcel = new Excel.Application();
//Excelファイルの新規作成
oBooks = oExcel.Workbooks;
oBook = oBooks.Add();
//エクセルVBAの標準モジュールのフォルダを作成する
oBook.VBProject.VBComponents.Add(vbext_ComponentType.vbext_ct_StdModule);
//Module1(標準モジュール)を作成する
MyModule = oBook.VBProject.VBComponents.Item("Module1");
//VBAコードが記載されたテキストファイルを流し込む
MyModule.CodeModule.AddFromFile("C:\\Users\\user\\Desktop\\sampleMacro.txt");
// マクロ有効ブックとして保存して閉じる
fileName = "C:\\Users\\user\\Desktop\\sample.xlsm";
oBook.SaveAs(Filename: fileName, FileFormat: Excel.XlFileFormat.xlOpenXMLWorkbookMacroEnabled) ;
oExcel.Quit();
//開放
Marshal.ReleaseComObject(MyModule);
Marshal.ReleaseComObject(oBook);
Marshal.ReleaseComObject(oBooks);
Marshal.ReleaseComObject(oExcel);
MyModule = null;
oBook = null;
oBooks = null;
oExcel = null;
GC.Collect();
MessageBox.Show("完了");
}
}