第 26 章 MICRO SOFT VISUAL BASIC による VISIO アプリケーションのプログラミング
実行可能プログラム (EXE) を実行すると、プログラムを起動した環境からプログラムにコマンド文字列が送られます。Visio® エンジンが送るコマンド文字列によって、その Visio 環境は、プログラムを起動した環境として識別されます。コマンド文字列には、プログラムに対する引数とは別に、特定のオブジェクトを取得するために使用する値が含まれます。文字列の値は、プログラムを [マクロ] サブメニューから実行したか、数式から実行したか、引数を使用したか、といったプログラムの実行方法によって異なります。
このセクションの内容...
ユーザーが [マクロ] サブメニューまたは [マクロ] ダイアログ ボックスからマクロを選択して、プログラムを実行した場合、Visio® エンジンからプログラムに渡されるコマンド文字列は、次のようになります。
"/visio=instanceHandle"
このコマンド文字列で重要な意味を持つ部分は、&quat;/visio&quat; という文字列です。これにより、ほかの不適切な環境からではなく、Visio エンジンからプログラムが実行されたことを確認できます。Windows ハンドル instanceHandle は、プログラムが実行されたVisio インスタンスのハンドルです。
RUNADDON 関数を使用する数式が評価される場合に、Visio エンジンからプログラムに送られるコマンド文字列は、数式に含まれるオブジェクトによって異なります。図形、マスタシェイプ、またはスタイル オブジェクトに属する数式が評価されるときに、プログラムが受け取るコマンド文字列の例を以下に示します。
図形の数式に RUNADDON 関数を使用して、数式が評価されるときにプログラムを実行することができます。このとき、Visio® エンジンからプログラムに送られるコマンド文字列は、次のようになります。
/visio=instanceHandle /doc=docIndex /page=pagIndex /shape=NameID
このコマンド文字列から、数式が設定されている図形を含むオブジェクトを識別できます。
この値を使用して、Document コレクションから対応する Document オブジェクトを取得できます。例を次に示します。
Set docObj = appVisio.Documents.Item(docIndex)
この値を使用して、Page コレクションから対応する Page オブジェクトを取得できます。例を次に示します。
Set pagObj = appVisio.Documents.Item(docIndex).Pages(pagIndex)
この値を使用して、Shape コレクションから対応する Shape オブジェクトを取得できます。例を次に示します。
Set shpObj = appVisio.Documents(docIndex).Pages(pagIndex).Shapes(NameID)
評価された数式が図面ページの図形ではなく、マスタシェイプに属する場合、コマンド文字列は次のようになります。
/visio=instanceHandle /doc=docIndex /master=masterIndex /shape=NameID
この場合、次のように Shape オブジェクトを取得します。
Set shpObj = appVisio.Documents(docIndex).Masters(masterIndex).Shapes(NameID)
評価された数式が、図形やマスタシェイプではなくスタイルに属する場合、コマンド文字列は次のようになります。
/visio=instanceHandle32 /doc=docIndex /style=NameID
この場合、次のように Style オブジェクトを取得します。
Set styleObj = appVisio.Documents(docIndex).Styles(NameID)
セルの数式に RUNADDONWARGS 関数を使用してプログラムを実行する場合、コマンド文字列には指定した引数が次のように含まれます。
/visio=instanceHandle /doc=docIndex /page=pagIndex /shape=Sheet.ID arguments
カスタム メニュー コマンドまたはカスタム ツールバー ボタンの AddOnArgs プロパティに引数が含まれている場合、コマンド文字列は次のようになります。
/visio=instanceHandle arguments
arguments 文字列には、プログラムで使用可能な任意の引数を使用できます。コマンド文字列全体の長さは、フラグ (/visio=、/doc=、/page=、および /shape など) を含めて 127 バイトまでに制限されているため、合計で 50 バイトを超える引数は使用しないようにします。
コマンド文字列全体の長さが 127 バイトを超えるとエラーが発生し、Visio アプリケーションはプログラムを実行しません。
Visio の [スタートアップ] フォルダからプログラムを実行する場合は、コマンド文字列にもフラグ /launch が含まれます。
/visio=instanceHandle /launch
解析とは、ステートメントを構文単位に分割する処理です。つまり、文字列を分析して、より処理しやすいコンポーネントのグループに分解します。
コマンド文字列を取得して解析するには、使用する開発環境で用意されている解析のための関数を使用してください。たとえば、Microsoft Visual Basic では、Command 関数を使用してコマンド文字列を取得し、解析には、Mid や StrComp などの文字列関数を使用します。