Sub xlSum()
Dim XL, a
Set XL = Application
a = XL.Sum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
MsgBox a
Set XL = Nothing
End Sub
上記のコードを Excel VBA で実行してみましょう。 Sum 関数が実行され、 1 から 10 までの和が 55 と計算されます。この記述方法は一見、冗長に見えますが、実は非常に移植性の高いコードになっています。
xlSum
Sub xlSum()
Dim XL, a
Set XL = CreateObject("Excel.Application")
a = XL.Sum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
MsgBox a
XL.Quit
Set XL = Nothing
End Sub
今度は、上記のコードを VBScript として実行してみましょう。メモ帳で記述して xl1.vbs などとして実行しましょう。 Excel の時と同じように、 55 が計算されるはずです。
2 つのコードの違いは、以下の部分です。
[VBA] Set XL = Application
[VBScript] Set XL = CreateObject("Excel.Application")
[VBScript] XL.Quit
Set XL = の部分は、 Excel 本体を XL という Object 変数に代入しています。 CreateObject("Excel.Application") という記述は、 Excel を新しく子プロセスとして起動してから、それを代入します。 Application という記述は、自分自身が Excel である場合に、自分自身を代入するものです。いずれにせよ、 Excel 本体が XL に代入されます。
最後の XL.Quit は、 Excel を終了するものです。 CreateObject で新しい Excel を起動したので、最後に正しい方法で閉じています。 Excel VBA でも、これを記述することができ、その場合には計算結果が表示された後、コードを実行していた Excel が終了します。
このように、 Application Object とは、外部から CreateObject("Excel.Application") で呼び出すものと同格のものなのです。
上記の VBScript 用コードで何が行われているか、判然としない場合は、 CreateObject の下に、次のコードを追加してみましょう。
XL.Visible = True
これは、 Application Object の Visible プロパティを設定するものです。 CreateObject は Excel を不可視で起動するため、起動時の Visible プロパティが False になっています。