VBScriptでCreateObject関数を使ってみよう
バッチファイルでの処理ではどうにもしっくりこない。セキュリティポリシーの関係でどうしてもPowerShellが使えない。
そんなときに使いたくないけど使えるのがVBScript。Windowsの環境であればいつだってメモ帳でスクリプトが書けるのです()。
バッチファイルだと行えないオブジェクトの参照も、CreateObject関数を用いることで、かんたんにExcelやIEの自動操作を行えます。CreateObject関数は、VBAのコードなどで見覚えがあるという方は多いかとは思いますが、今回用いるVBScriptでも使用できます。
Excelに記述されたマクロを実行させてみましょう。
' oExcel変数を宣言し、Excelを参照させる Dim oExcel Set oExcel = CreateObject("Excel.Application") ' ブックを開き、test_macroを実行する oExcel.Workbooks.open "C:\test\test.xlsm" oExcel.Run "test_macro" ' Excelマクロ側でApplication.Quitと書き起動させたアプリケーション側で制御すると良い
他にはTeraTermのマクロなども起動できたりします。
TeraTermマクロはパラメータを渡して、実行させることができるため、VBScriptで予めパラメータを編集しておくことでより柔軟なプログラミングも可能です。
が、まずは平易なパラメータを渡してみましょう。
Dim oShell Set oShell = CreateObject("WScript.Shell") ' TeraTermマクロに渡す引数 ' 引数1:test.ttl > 起動するマクロ名 ' 引数2:test_user ' コマンドプロンプトで、以下のように実行するのと同じ内容になります ' > "C:\teraterm\ttpmacro" "test.ttl" "test_user" command = """C:\teraterm\ttpmacro"" ""test.ttl"" ""test_user""" oShell.Run command
もちろん正規表現も備えています。
Dim fso, regexp, folder, file Set fso = CreateObject("Scripting.FileSystemObject") Set regexp = CreateObject("VBScript.RegExp") regexp.Pattern = ".*.txt" Set folder = fso.GetFolder("C:\test") ' C:\testにある拡張子(.txt)のファイルを削除する For Each file in folder.Files If regexp.Test (file.Name) Then ' fileオブジェクトの参照は削除により破棄されてしまうので先に名前を取得 Dim name: name = file.Name fso.DeleteFile "C:\test" & "\" & file.Name, True MsgBox name & "を削除しました" End If Next
VBScriptに書いておくことで、わざわざExcelを開きマクロを実行させる必要がなくなるため、面倒くさがりな人たちもニッコリなのではないかと思います。
例えばTeraTermの接続先やユーザーの情報をExcelから取得し、その後TeraTermマクロを実行して接続先からデータを取得し、さらに別のExcelマクロを実行させてデータの自動編集などを行うなどもできるでしょう。
以上のように、CreateObject関数を用いてVBScriptに包んでおくことでワンクリックでやってくれるスクリプトが作成でき、レガシーでセキュアな現場でもちょっとは楽になるかもしれません。