var objWshShell = new ActiveXObject("WScript.Shell");
// カレントフォルダーを取得
var file_dir = objWshShell.CurrentDirectory;
var fso, f, fc;
fso = new ActiveXObject("Scripting.FileSystemObject");
try
{
f = fso.GetFolder(file_dir);
}
catch(err)
{
WScript.echo("error");
}
// ファイル名を取得
fc = new Enumerator(f.files);
var file_name;
var file_ext;
var file_path;
var tmpDir;
var vba_macro_dir;
var dot_position;
for(;!fc.atEnd();fc.moveNext())
{
file_name = fc.item().Name;
// ファイル名の拡張子を取得
dot_position = file_name.lastIndexOf(".") + 1;
file_ext = file_name.substr(dot_position ,file_name.length - dot_position);
if((file_ext == "xlsm") || (file_ext == "xls") || (file_ext == "xlsx") )
{
file_path = file_dir + "\\" + file_name;
tmpDir = "\\" + file_name.substr(0, dot_position - 1);
var vba_file_root_dir = file_dir + "\\EXCELVAB";
if(!fso.FolderExists (vba_file_root_dir))
{
// フォルダーが存在しない場合、フォルダーを作成
fso.CreateFolder (vba_file_root_dir);
}
vba_macro_dir = vba_file_root_dir + tmpDir;
if(!fso.FolderExists (vba_macro_dir))
{
// フォルダーが存在しない場合、フォルダーを作成
fso.CreateFolder (vba_macro_dir);
}
var excel = WScript.CreateObject("Excel.Application");
excel.Visible = true;
excel.Workbooks.Open( file_path );
var book = excel.Workbooks( excel.Workbooks.Count );
var cnt_module = 0;
var e = new Enumerator( book.VBProject.VBComponents );
for( ; ! e.atEnd() ; e.moveNext() )
{
// モジュールを取得
var vba_module = e.item();
// このモジュールの名前を取得
var module_name = vba_module.Name;
//WScript.Echo( module_name );
// このモジュールのエクスポート先パスを決定
var bas_path = vba_macro_dir + "\\" + module_name + ".bas";
// このモジュールをエクスポート
vba_module.Export( bas_path );
cnt_module ++;
}
// Excelを閉じて終了
excel.DisplayAlerts = false;
excel.Quit();
excel = null;
}else
{
continue;
}
}