VBAからのJScriptの活用

VBAからJScriptを利用する場合は、ScriptControl(スクリプト言語を利用するためのコントロール)というオブジェクトを利用します。VBエディタの[参照設定]-[Microsoft Script Control 1.0]をチェックし、以下のように利用します。

図2.参照設定

[リスト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を代入して解放するようにします。