データのグラフィック表示について (Visio)
メモデータ接続機能は、Microsoft Visio Professional 2013のライセンスを持つユーザーのみが使用できます。
Visio でのデータ接続には、4 つの側面があります。
- データ ファイルに接続する
- 図形のデータにリンクする
- リンクされたデータのグラフィック表示
- データ ソースで変更されたリンク済みデータの更新、リンクされた図形の更新、以後に発生する可能性のある競合の解決
通常は、ここに示される順序でこれらの側面にアプローチします。つまり、最初に Visio 図面をデータ ソースに接続し、次に図面に含まれる図形をデータ ソース内のデータにリンクさせ、その図形のデータをグラフィック表示し、必要に応じてリンクされたデータを更新します。 Visio オブジェクト モデルには、上記の 4 つの側面それぞれについて、関連する新しいオブジェクトやメンバーがあります。 このトピックは、第 3 および第 4 の、リンクされたデータを Visio の図形内にグラフィック表示すること、データを更新することに関するものです。 データ接続の他の側面については次のトピックを参照してください。
リンクされたデータをプログラムで表示するには、データ表示用の Visio API が使えます。次のようなオブジェクトと関連するメンバーがあります。
- GraphicItems コレクション
- GraphicItem オブジェクト
Visio 図面内の図形をデータ レコードセットの行にリンクすると、リンク先のデータをプログラムでグラフィック表示できます。 たとえば図面内に、データにリンクする図形がいくつかあって、それぞれがプロジェクトの各段階の進行状況を表しているとします。 この場合、特定の図形データのアイテムに、進行状況バーを関連付けることができます。 その後、進行状況バーをプロジェクト図形の選択に適用し、各プロジェクトの完了に向けた進行状況を視覚的に表示できます。
データ グラフィックとグラフィック アイテムの概要
データをグラフィカルに表示しやすくするために、Visio では、データ グラフィックの概念と、データ グラフィック マスターと呼ばれる Master オブジェクトの種類が導入されています。これは VisMasterTypes 列挙で visTypeDataGraphic 値で表されます。 visTypeDataGraphic 型の Master オブジェクトを Masters コレクションに追加するには、Masters.AddEx メソッドを使用する必要があります。
Visio には何種類かのマスターがありますが、図形マスターもその 1 つです。 図形マスターから作成したインスタンスは図形になります。 Visio には塗りつぶしのパターン、線パターン、線端というマスターもありますが、そのインスタンスを作成することはできません。 このようなマスターを図形に適用することにより、マスター パターンを図形に付与することができます。 データ グラフィック マスターは、そのインスタンスを作成しないため、パターン マスターに似ています。 線パターンや塗りつぶしのパターンと同様に、図形に適用することは可能です。
データ グラフィック マスターは、Visio UI の [データ グラフィックス] 作業ウィンドウに表示される データ グラフィックス に対応します。 データ グラフィック マスターは、1 つ以上の グラフィック項目で構成されます。 グラフィック アイテムは、定義したルールに基づいて、指定した図形を基準にした位置に、図形データに関連付けることができる、既製のビジュアル コンポーネントとして設計された Visio 図形です。
Visio には次のような種類のグラフィック アイテムがあります。
- テキスト 図形を基準にして指定した位置に、吹き出し内のテキストとしてデータを表示します。
- 値による色 図形データと特定の値または値の範囲の比較に基づいて、図形の色を変更します。
- データ バー 棒グラフとグラフを使用して、図形を基準にして指定した位置にデータを表示します。
- アイコン セット 図形を基準にして指定した位置に、データ値または条件を表すアイコンのセットの 1 つを表示します。
Visio には、グラフィック アイテムに初めから組み込まれている、さまざまな標準データ グラフィックがあります。 図形に初めから組み込まれているグラフィック アイテムとは別のデータ グラフィックを適用したい場合は、カスタム データ グラフィックを作成してください。 Visio UI を使用しててデータ グラフィックを作成し、そこにグラフィック アイテムを追加するようお勧めします。
UI でデータ グラフィックスを作成するには
- [データ] タブで、[データ グラフィック] をクリックします。
- [新しいデータ グラフィックの作成] をクリックし、[新しいデータ グラフィック] ダイアログ ボックスで [新しいアイテム] をクリックします。
- ダイアログ ボックスが開いたら、アイテムをカスタマイズし、同じ手順でカスタム アイテムを追加します。
データ グラフィック マスターを作成し、プログラムで既存のグラフィック アイテムに組み込むこともできます。 グラフィック アイテムをプログラムで作成することはできませんが、既存のデータ グラフィックの動作をカスタマイズすることはできます。 さらに、コードを使用してグラフィック アイテムの動作や位置を変更することもできますし、Expression と呼ばれる、個々のグラフィック アイテムがどのようにデータを表示するかを定義するルールも同様です。 式は、ShapeSheet の数式であっても、他の有効な ShapeSheet 式や図形データ (カスタム プロパティ) ラベルであってもかまいません。 図形データ ラベルである式を設定するには、ラベルを中かっこ ({}) で囲み、GraphicItem.SetExpression メソッドの 2 番目の ( Expression) パラメーターとして渡す必要があります。
独自の組み合わせのグラフィック アイテムを組み込み、その動作も定義してデータ グラフィックを作成すると、これをプログラムでデータにリンクされた図形に適用することができます。
データ グラフィックに関するオブジェクトとメンバ
前節で説明した、visTypeDataGraphic という種類の Master オブジェクトに加え、Visio のデータ グラフィック API には、次のようなオブジェクトや関連したメンバーがあります。
- GraphicItems コレクション
- GraphicItem オブジェクト
これは特にデータ グラフィックを操作するために用意されたオブジェクトやメンバーですが、Visio にはほかにも、データ グラフィック API を構成するオブジェクトがいくつかあります。 たとえば、 Shape.DataGraphic プロパティと Selection.DataGraphic プロパティを使用すると、それぞれ図形と選択範囲にデータ グラフィックを適用できます。 読み取り専用 の Shape.IsDataGraphicCallout プロパティは、特定の図形が図面内のデータ グラフィック アイテムとして機能しているかどうかを示します。
データ グラフィックをデータにリンクした図形に適用する
次の例は、Selection.DataGraphic プロパティを使用して、UI 上で作成した既存のカスタム データ グラフィックを、図面上の選択した図形に適用する方法を示します。 このコードを機能させるには、既存のカスタム データ グラフィックに "MyCustomDataGraphic" という名前を付ける必要があります。または、図面の既存のデータ グラフィックの名前を、コード内の "MyCustomDataGraphic" に置き換えることもできます。
Public Sub ApplyDataGraphic()
Dim vsoSelection As Visio.Selection
ActiveWindow.SelectAll
Set vsoSelection = ActiveWindow.Selection
Set vsoSelection.DataGraphic = ActiveDocument.Masters("MyCustomDataGraphic")
End Sub
データ グラフィック マスターの動作をカスタマイズする
Master.DataGraphicHidden プロパティと Master.DataGraphicHidesText プロパティを使用して、データ グラフィック マスターの動作の特定の側面をカスタマイズします。
DataGraphicHidden プロパティは、データ グラフィック マスターを、Visio UI の [データ グラフィック] ギャラリーに表示するかどうかを表します。 このプロパティの値を True に設定すると、該当するマスターは、ギャラリー内のデータ グラフィックのリストに表示されません。 このプロパティの既定値は False です。
DataGraphicsHidesText プロパティは、データ グラフィック マスターを適用することにより、図形そのもののテキスト (グループ図形であれば 1 次図形のテキスト) が隠れるかどうかを表します。このプロパティの既定値も False です。
GraphicItem.UseDataGraphicPosition プロパティは、グラフィック アイテムが属する GraphicItems コレクションのデータ グラフィック マスターのグラフィック アイテムに対して、現在の既定の吹き出し位置を使用するかどうかを決定します。 visTypeDataGraphic 型の Master オブジェクトの GraphicItems コレクション内のグラフィック アイテムの既定の吹き出し位置は、Master.DataGraphicVerticalPosition プロパティと Master.DataGraphicHorizontalPosition プロパティの設定によって指定されます。 UseDataGraphicPosition が True の場合、グラフィック アイテムは既定の設定に従って配置されます。 UseDataGraphicPosition が False の場合、その位置は Graphic Item.VerticalPosition プロパティと GraphicItem.HorizontalPosition プロパティの設定によって決まります。
また、グラフィック アイテムの HorizontalPosition プロパティと VerticalPosition プロパティの各値が、DataGraphicHorizontalPosition プロパティと DataGraphicVerticalPosition プロパティの各値と等しい場合は、グラフィック アイテムの UseDataGraphicPosition プロパティの値は、自動的に True に設定されます。
ただし、図形に適用されたデータ グラフィックの位置は、ユーザーがデータ グラフィックのハンドルを操作して手動で再設定できます。 この方法で設定された位置は、プロパティ設定で指定された位置より優先されます。
Master.DataGraphicShowBorder プロパティは、データ グラフィックを適用する図形を基準に、既定の位置にあるグラフィック 項目の周囲に罫線を表示するかどうかを決定します。 既定では、罫線は非表示になります。
プログラムでデータ グラフィックをまとめる
次の例は、データ グラフィック マスターを作成し、これに既存のグラフィック アイテムを追加し、そのグラフィック アイテムを修正する方法を示します。 この例では Masters.AddEx メソッドを使って、新しいデータ グラフィック マスターを、現在のドキュメントの Masters コレクションに追加します。
次に、Master.Open メソッドを使用して、既存のデータ グラフィックのマスター シェイプのコピーを取得して編集します。 マスター シェイプ自体の代わりにマスター シェイプのコピーを編集する必要がある理由の詳細については、Open メソッドを参照してください。 次に、 GraphicItems.AddCopy メソッドを使用して、既存のグラフィック項目のコピーを新しいマスターの GraphicItems コレクションに追加し、 GraphicItem.SetExpression メソッドを使用してグラフィック 項目が表すデータ フィールドを変更します。 さらに、GraphicItem.PositionHorizontal プロパティを設定して、グラフィック アイテムの左右方向の相対位置 (これが適用される図形を基準とした位置) を変更します。
最後に、 Master.DataGraphicHidesText プロパティを True に設定して図形のテキストを非表示にし、マスター シェイプのコピーを閉じます。このプロパティは、このデータ グラフィック マスターが適用されている既存の図形に変更を適用します。 その後、新しいデータ グラフィック マスターを追加の図形に適用できます。
Public Sub AddNewDataGraphicMaster()
Dim vsoMaster As Visio.Master
Dim vsoMasterCopy As Visio.Master
Dim vsoMaster_Old As Visio.Master
Dim vsoGraphicItem As GraphicItem
Dim vsoGraphicItem_Old As Visio.GraphicItem
Set vsoMaster = ActiveDocument.Masters.AddEx(visTypeDataGraphic)
Set vsoMasterCopy = vsoMaster.Open
Set vsoMaster_Old = ActiveDocument.Masters("old_master_name")
Set vsoGraphicItem_Old = vsoMaster_Old.GraphicItems(1)
Set vsoGraphicItem = vsoMasterCopy.GraphicItems.AddCopy(vsoGraphicItem_Old)
vsoGraphicItem.SetExpression visGraphicExpression, "new_data_field_name"
vsoGraphicItem.PositionHorizontal = visGraphicLeft
vsoMasterCopy.DataGraphicHidesText = True;
vsoMasterCopy.Close
End Sub
先のコード例は、既存のデータ グラフィック マスターの名前 (新しいマスターに追加しようとしている 1 つ以上のグラフィック アイテムが含まれるもの) と、マスターに追加しようとしている各グラフィック アイテムの ID がわかっていると想定しています。 既存のデータ グラフィックのマスター シェイプ名は、[データ グラフィック] 作業ウィンドウのマスター シェイプの上にマウス ポインターを置いて確認できます。 また、マスター名と ID も、次のコードのように、現在のドキュメントの Masters コレクションについて繰り返すことにより確認することができます。
For intCounter = 1 To ActiveDocument.Masters.Count
If ActiveDocument.Masters(intCounter).Type = visTypeDataGraphic Then
Debug.Print ActiveDocument.Masters(intCounter).Name, ActiveDocument.Masters(intCounter).ID
End If
Next
同様に、次の例に示すように、マスターの GraphicItems コレクションを反復処理して、既存のグラフィック アイテムの ID プロパティと Tag プロパティの値を決定できます。 Tag プロパティは単なる文字列であって、Visio がその値を使用することはありません。 既定では空です。 何らかの値を設定しておくと、個々のグラフィック アイテムをプログラムで容易に識別できます。
For intCounter = 1 To (vsoMaster_Old.GraphicItems.Count)
Debug.Print vsoMaster_Old.GraphicItems(intCounter).ID, oldMaster.GraphicItems(intCounter).Tag
Next
データ グラフィックスをプログラムでカスタマイズする方法を示すコード サンプルを表示するには、Visio SDK をダウンロードし、コード サンプル ライブラリを参照してください。
サポートとフィードバック
Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。