VBAからのJScriptの活用
VBAからJScriptを利用する場合は、ScriptControl(スクリプト言語を利用するためのコントロール)というオブジェクトを利用します。VBエディタの[参照設定]-[Microsoft Script Control 1.0]をチェックし、以下のように利用します。
[リスト6]JScriptを利用する枠組み
Dim js As New ScriptControl 'ScriptControlオブジェクト変数の定義と生成
js.Language = "JScript" 'ScriptControlオブジェクトの言語をJScriptに設定
'----------------------
'JScriptを利用した処理
'----------------------
Set js = Nothing 'ScriptControlオブジェクトを解放
後述のサンプルでは、上記のJScriptを利用した処理の部分のみ記述し、ScriptControlオブジェクトはjsと表記します。
VBAからのオブジェクト利用方法
VBAからオブジェクトを取り扱う際には、若干の注意が必要です。
JScript内でメソッドを実行したり、プロパティを参照したりする場合には「オブジェクト.メソッド」、「オブジェクト.プロパティ」とドット演算子を挟んで記述しますが、VBA内でこの記法を用いると実行時エラーとなる場合があります。 これはメソッド、プロパティの名前がVBAの予約語になっている場合です。VBエディタにて小文字で記述したメソッド、プロパティの名前が、自動的に大文字始まりに修正される場合は予約語です。この場合にはCallByName関数を用い、
CallByName(オブジェクト,メソッド,VbMethod)
CallByName(オブジェクト,プロパティ,VbGet)
と記述します。
また、JScript内で配列の要素を参照する場合には、配列[インデックス]とブラケットを使って記述しますが、VBAではこの記法はコンパイルエラーとなります。この場合にもCallByName関数を用い、 CallByName(配列,インデックス,VbGet) と記述します。
なお、オブジェクトを変数に代入する場合には、Set を必ず付けるようにし、不要になったオブジェクトはNothingを代入して解放するようにします。