第 15 章 VISIO での MICROSOFT VBA プログラミング
スタンドアロンのプログラムで Visio® の Application オブジェクトへの参照を取得するには、まずそのオブジェクトを作成または取得する必要があります。これに対して、Microsoft Visual Basic for Applications (VBA) プロジェクトのコードは、実行中の Visio インスタンス内で処理されるので、Application オブジェクトへの参照を取得する必要はありません。Visio は Visio インスタンスを表すグローバル オブジェクトを提供しています。また、Visio では、ユーザーのプロジェクトに関連付けられた Visio ファイルを表すThisDocument オブジェクトも提供されています。
このセクションの内容...
Visio のインスタンスを表すグローバル オブジェクトを使うと、特定のプロパティに直接アクセスすることができます。Visio グローバル オブジェクトのプロパティには、オブジェクト参照用の接頭語は付いていません。
Visio グローバル オブジェクトとそのプロパティ
Application オブジェクトは、Visio グローバル オブジェクトのプロパティです。そのため、Visio グローバル オブジェクトの Application プロパティを直接参照することにより、その Application オブジェクトのプロパティにアクセスすることができます。
Documents コレクションの最初の図面を取得するコードの例を以下に示します。3 つの例では、それぞれ異なる構文を使用しています。
例 1 Application オブジェクトの作成。これは外部プログラム作成時によく使用されるコードです。
Dim appVisio As Visio.Application
Dim docsObj As Visio.Documents
Dim docObj As Visio.Document
Set appVisio = CreateObject("visio.application")
Set docsObj = appVisio.Documents
Set docObj = docsObj.Item(1)
例 2 Visio グローバル オブジェクトの Application プロパティを使用したものです。
Dim docsObj As Visio.Documents
Dim docObj As Visio.Document
Set docsObj = Application.Documents
Set docObj = docsObj.Item(1)
例3 Visio グローバル オブジェクトの Documents プロパティに直接アクセスしたものです。
Dim docObj As Visio.Document
Set docObj = Documents.Item(1)
例 2 の Application と例 3 の Documents の前には、オブジェクト型がありません。Visio グローバル オブジェクトのプロパティまたはメソッドを参照する場合は、グローバル オブジェクトの変数の宣言は不要です。プロパティの前にオブジェクト型を指定する必要もありません。グローバル オブジェクトであることが、自動的に認識されるからです。3 つ目の例は、VBA プロジェクトから Documents コレクションにアクセスする最も直接的な方法です。
以下は、よく使われる Visio グローバル オブジェクトのプロパティとそのコードです。
Set docObj = ActiveDocument
Set pagObj = ActivePage
Set winObj = ActiveWindow
Visio グローバル オブジェクトのプロパティおよびメソッドの詳細については、Visio 製品付属のオンライン ヘルプ「開発者用リファレンス」([ヘルプ] メニューから [開発者用リファレンス] を選択) を参照してください。
注 Visio のグローバル オブジェクトは、Visio ファイルの VBA プロジェクト内のコードでのみ使用できます。
Visio ファイルの各 VBA プロジェクトには、デフォルトで ThisDocument と呼ばれるクラス モジュールが含まれています。このクラス モジュールは、プロジェクトに関連付けられたファイルのプロパティ、メソッド、およびイベントを表しています。他のプログラムは、実行時に ThisDocument にアクセスできます。これは、他のクラス モジュールの場合と同じです。
Visio オブジェクト モデルで高位に位置する Document オブジェクトおよび関連するオブジェクト。
VBA プロジェクトに関連付ける必要がないファイルを効率よく処理するには、Document コレクションから Documents オブジェクトを取得します。VBA プロジェクトに関連付けられたファイルの場合は、ThisDocument オブジェクトを使用したほうが効率的です。
たとえば、Hello.vsd というファイルの最初のページを参照するためには、まずグローバル オブジェクトの Documents コレクションから Document オブジェクトを取得します。以下は、ファイルの Pages コレクションから Hello.vsd の最初のページを取得する例です。
Set docObj = Documents.Item("hello.vsd")
Set pagObj = docObj.Pages.Item(1)
Hello.vsd に VBA プロジェクトが関連付けられている場合は、以下の例のように ThisDocument オブジェクトだけを使うこともできます。
Set pagObj = ThisDocument.Pages.Item(1)
Document オブジェクトへの参照を 1 度取得すると、その Document オブジェクトのプロパティからファイルの他の Visio オブジェクトを取得することができます。さらに、オブジェクト階層内のすべてのオブジェクトに対しても、同じようにプロパティからオブジェクトを順に取得していくことができます。
ThisDocument オブジェクトは、機能を拡張できる "拡張可能なオブジェクト" なので、プロパティやメソッドを追加できます。この ThisDocument オブジェクトは、Visio が提供する唯一の拡張可能オブジェクトです。さらに、プロジェクト エクスプローラで ThisDocument を選択し、ページ設定やデフォルトのスタイルなどのプロパティを変更することもできます。また、[プロパティ] ウィンドウでは、タイトル (Title)、作成者 (Creator)、および題目 (Subject) などのファイルのプロパティも変更可能です。
ThisDocument のプロパティ、メソッド、およびイベントの詳細を調べるには、プロジェクト エクスプローラでそのプロジェクトの ThisDocument オブジェクトを選択します。次に、[オブジェクト ブラウザ] を開き、[プロジェクト/ライブラリ] ボックスでその ThisDocument が含まれる Visio プロジェクトを選択して、ThisDocument のメンバを表示します。