スクリプト / スクリプトを書くときの留意点

■スクリプトを書くときの留意点

●ユーザーからの入力

Popup オブジェクトのメソッドを明示的に実行した場合を除き、ユーザーが入力しない限り閉じないダイアログ ボックスが出ることはありません (もしあればバグです)。

System.SetSuspendState メソッドなど、一定の時間が経過すると自動で閉じるダイアログ ボックスが出ることはあります。

その他に DLL などの外部のコードがエラー表示を MessageBox で出そうとするような場合があるかもしれません (あまりないと思いますが)。

●カレント ディレクトリ

スクリプトを実行するとき、カレント ディレクトリは実行されるスクリプトが置かれている場所に移動します。

スクリプト中で Script.ExecScript メソッドを実行したときにも、カレント ディレクトリは実行されるスクリプトが置かれている場所に移動し、ExecScript メソッドから抜けるときに元のディレクトリに戻されます。

●プロジェクト フォルダ切り替え

Application オブジェクトの Project プロパティにフォルダのパスを代入することで、プロジェクト フォルダの切り替えができますが、切り替えを行うと、切り替え前に存在した Application オブジェクトの下位オブジェクト (オブジェクト階層の項を参照) は消滅し、アクセス不可になります。ただし Application オブジェクト直付けの Documents、Popup、System オブジェクトはアクセス可能です。

またプロジェクト フォルダ切り替により、クリップボード上のデータも無効になります。

●音声データ内の位置

音声データの選択範囲やラベル位置など、時間軸上の位置の単位は秒で揃えてあります (型は浮動小数点)。

●Item プロパティ

オブジェクトは既定プロパティというものを持っている場合があり、既定プロパティはプロパティ名を省略して記述することが認められています。Item という名のプロパティは通常既定なので略記が可能です。例えば以下の二つは同じ意味になります:

Application.Documents.Item(0)
Application.Documents(0)

●コレクション全要素の調べ上げ

Documents オブジェクトや Labels オブジェクトのように、何かのオブジェクトの集合を抱えるオブジェクトは「コレクション オブジェクト」または単に「コレクション」と呼ばれたりします。

コレクション内の全要素を調べ上げる必要があるとき、JScript では言語組み込みの Enumerator オブジェクト、VBScript では For Each...Next ステートメントが使用できます。

これらのオブジェクトやステートメントを使用することで、調べ上げの最中にコレクションの構成 (要素の個数や順番など) が変わっても、特定の要素に二回以上アクセスしてしまうエラーを回避することができます。

Named オブジェクトの場合は、これらの方法でもコマンド ラインで与えられたオプションを知ることができ、無効なオプションが与えられているかどうかも調べることができます。