第 16 章 VISIO の DOCUMENT オブジェクト、PAGE オブジェクト、および SHAPE オブジェクトの使い方
Document オブジェクトは、Visio® のインスタンスで開いている図面ファイル (.vsd)、ステンシル ファイル (.vss)、またはテンプレート ファイル (.vst) を表します。プログラムから既存の図面を操作するとき、ほとんどの場合は、アクティブなファイルのアクティブなページ (アクティブな図面ウィンドウで表示中の図面) だけを操作します。しかし、プログラムで図面を開いたり、アクティブではない開かれている図面にアクセスする場合もあります。
このセクションの内容...
ファイルに関する情報を取得するには、Document オブジェクトへの参照を取得する必要があります。
Document オブジェクトおよび Visio オブジェクト モデルで上位にある関連するオブジェクト
ソリューションの設計方法に合わせて、あらゆる方法で Document オブジェクトへの参照を取得することができます。以下に示すコードはすべて、次のように Document オブジェクトを変数 docObj として定義した場合の例です。
Dim docObj As Visio.Document
Set docObj = ActiveDocument
アクティブなウィンドウを取得済みの場合は、その Window オブジェクトの Document プロパティを取得することができます。このプロパティが参照する Document オブジェクトは、ActiveDocument が参照する Document オブジェクトと同じです。
グローバル オブジェクトの詳細については、「第 15 章 Visio での Microsoft VBA プログラミング」の「Visio グローバル オブジェクトの使用」を参照してください。
Set docObj = Documents.Item("hello.vsd")
上記のステートメントは、Hello.vsd という図面ファイルを Documents コレクションから取得しています。ファイルが開いていない場合にこのステートメントで Hello.vsd を取得しようとすると、エラーが発生します。
Set docObj = Documents.Open("c:\visio\drawings\hello.vsd")
このステートメントは、Hello.vsd をオリジナル ファイルとして開き、Documents コレクションに追加しています。
Visio の任意のファイル (ステンシル、テンプレート、および図面ファイル) は、Open メソッドで開くことができます。ただし、ステンシルとテンプレートについては、この方法はお勧めできません。Open メソッドは、ファイルをコピー用または読み取り専用としてではなく、オリジナルとして開きます。ステンシルやテンプレートをオリジナルとして開くのは適切ではありません。オリジナルのファイルは変更が可能なため、これらをオリジナルとして開いてしまうと、マスタシェイプ編集、テンプレートの作業状態の変更など、ユーザーに行わせたくない変更を防止できないからです。
Visio ファイルを読み取り専用として開くには、OpenEx メソッドを使用します。また、OpenEx では、以下のようなファイル オープン操作を行うことができます。
詳細については、Visio 製品付属のオンライン ヘルプ「開発者用リファレンス」の「OpenEx」を参照してください。
Description、 Keywords、 Subject、Title などのプロパティから、ファイル情報を取得することができます。これらのプロパティは、[プロパティ] ダイアログ ボックス ([ファイル] メニューから [プロパティ] を選択) のテキスト ボックスに表示される情報に対応しています。
Document オブジェクトには、図面のファイル名を取得できるプロパティが 3 つあります。
これらのプロパティは取得専用で、値を設定することはできません。ファイルの名前、ドライブ、パスを変更するには、SaveAs メソッドを使用してファイルを別の名前、ドライブ、パスで保存します。
ファイルの ReadOnly プロパティまたは Saved プロパティからは、そのファイルのステータスを取得できます。
さらに、Document オブジェクトの DocumentSheet プロパティから、Document オブジェクトに関する情報を取得することができます。このプロパティは Shape オブジェクトを返します。この Shape オブジェクトの Cells プロパティは、図面の数式を持つ Cell オブジェクトを返します。これらの Cell オブジェクトは、図面のシェイプシート (ShapeSheet®) ウィンドウに表示されているセルに対応しています。数式の使い方の詳細については、「第 17 章 数式のオートメーション化」を参照してください。
ファイルで使用可能なスタイルを確認するには、Document オブジェクトの Styles プロパティを取得します。
Styles プロパティは Styles コレクションを返します。このコレクションは、ファイルに定義された一連のスタイルを表します。Style オブジェクトの Name プロパティは、スタイル名を返します。Visio では、このスタイル名は [書式設定] ツールバーの [すべてのスタイル] ボックスまたは [スタイルの定義] ダイアログ ボックス ([書式] メニューから [スタイルの定義] を選択) に表示されます。
以下は、ファイルの Styles コレクション内でループ処理を行い、ユーザー フォームのリスト ボックスにスタイル名を一覧表示するコードの例です。
Sub ListStyles ()
Dim stylsObj As Visio.Styles
Dim stylObj As Visio.Style
Dim styleName As String
Set stylsObj = ThisDocument.Styles
UserForm1.ListBox1.Clear
For Each stylObj In stylsObj
Set stylObj = stylsObj(curStyleIndx)
styleName = stylObj.Name
UserForm1.ListBox1.AddItem styleName
Next
UserForm1.Show
End Sub
ヒント Microsoft Visual Basic エディタで、Document オブジェクトのデフォルトのスタイルを変更できます。プロジェクト エクスプローラで ThisDocument オブジェクトを選択し、[プロパティ] ウィンドウに一覧表示されているスタイルを変更します。[プロパティ] ウィンドウには、DefaultFillStyle、DefaultLineStyle、DefaultStyle、および DefaultTextStyle の各スタイルが表示されます。
プログラムでスタイルを作成するには、Styles コレクションの Add メソッドを使って新規スタイル名を指定します。オプションとして、新規スタイルの基になるスタイルの名前を指定したり、テキスト、線、塗りつぶしの各属性をスタイルに設定するかどうかを指定することができます。
たとえば、[標準] スタイルを基に「見出し」という名前の新規スタイルを作成し、テキスト属性だけを設定するには、以下のようなコードを入力します。
Set stylObj = stylsObj.Add("見出し", "標準", 1, 0, 0)
基にするスタイルを指定しないで「道路標識」という新規スタイルを作成し、テキスト、線、塗りつぶしの各属性を設定するには、以下のようなコードを入力します。
Set stylObj = stylsObj.Add("道路標識","", 1, 1, 1)
スタイル名は Name プロパティを設定することによって変更できます。また、IncludesFill、IncludesLine、または IncludesText プロパティを設定することによって、テキスト、線、塗りつぶしの各属性をスタイルに設定するかどうかを変更できます。Visio でのスタイル作成の詳細については、Visio 製品付属のオンライン ヘルプ「開発者用リファレンス」で「スタイル」を検索してください。
Style オブジェクトは Cells プロパティを持ちます。このプロパティを使用して、スタイルを定義するシェイプシート セルに数式を設定できます。このプロパティはスタイルのセルに対応する Cell オブジェクトを返します。
たとえば、スタイルのフォント サイズを変更するには、以下のようなコードを入力します。
Set fontsizeCellObj = stylObj.Cells("Char.Size")
fontsizeCellObj.Formula = "18 pt"
数式の詳細については、「第 17 章 数式のオートメーション化」を参照してください。
プログラムで作成した図面の印刷や保存を、プログラムで行うこともできます。Visio メニュー コマンドでの操作に慣れているユーザーに対しては、プログラムで図面を作成し、印刷と保存は Visio のユーザー インターフェースから行わせるようにするでしょう。ユーザーが操作に慣れていない場合は、プログラムで印刷や保存を行うことができます。
Print メソッドを使用して、図面ファイルまたは図面ページを印刷できます。
ファイルの全ページを印刷するには、Document オブジェクトの Print メソッドを使用します。このメソッドは、[印刷] ダイアログ ボックス ([ファイル] メニューから [印刷] を選択) で [すべて] を選ぶのと同じ処理を実行します。1 ページだけ印刷する場合は、Page オブジェクトの Print メソッドを使用します。このメソッドは、ページを表示して、[印刷] ダイアログ ボックスの [現在のページ] を選択するのと同じ処理を実行します。
Microsoft Visual Basic for Applications (VBA) または Visual Basic から印刷する場合は、以下の作業をする必要があります。
ファイルを印刷するコードの例を以下に示します。
Dim docObj As Visio.Document
Dim docObjTemp As Object
Dim dummy As String
Set docObj = ThisDocument
Set docObjtemp = docObj
dummy = docObjTemp.Print
プログラムでファイルを保存するには、Document オブジェクトの Save メソッドまたは SaveAs メソッドを使用します。
SaveAs メソッドでは、新規ファイルに名前を付けて保存する場合にファイルの名前とパスを指定したり、既存のファイルのコピーを別の名前で保存したり、既存のファイルを別のドライブやパスに保存することができます。例を以下に示します。
ThisDocument.SaveAs "c:\visio\drawings\組織図.vsd"
Save メソッドは、ファイルが保存済みで名前も付けられている場合にだけ使用します。例を以下に示します。
ThisDocument.Save
Visio ユーザー インターフェースの [保存] コマンドでは、ファイルに名前が付いていない場合は [ファイル名を付けて保存] ダイアログ ボックスを表示します。これに対して、名前が付いていないファイルに対して Save メソッドを呼び出しても SaveAs メソッドは呼び出されないため、エラーが発生します。
ファイルが保存されているかどうかを確認するには、そのファイルの Path プロパティを調べます。このプロパティは、ファイルが保存されている場合はファイルのフルネームのドライブとパスを返し、保存されていない場合は Null 文字列を返します。変更済みのファイルが保存されたかどうかを確認するには、そのファイルの Saved プロパティを調べます。