Visioのオブジェクトモデル

Visioでマクロ組んでなんか作業をするには、まずこの図を頭に思い浮かべたほうがわかりやすいかもしれない。

http://www.interq.or.jp/chubu/r6/visio/DVS_OMP.htm

図を見ればわかると思うけど、重要なとこだけ簡単に説明しておくと

  • 一番トップにVisio本体(Application)がいて
    • Applicationは複数のドキュメント(Documents)を持っており
      • 各ドキュメント(Document)は複数のページ(Pages)を持っていて
        • 各ページ(Page)には図形(Shapes)が含まれ、
          • 各図形(Shape)ごとに固有のデータを持っている

ということになる。

具体的に例を挙げると、Visioを起動して、新規ドキュメントを作成し、線やら四角やらを描いて、適当なファイル名で保存して、以下のマクロを実行してみよう


Option Explicit

Sub 親子関係()
'// 宣言部分
Dim vis_app As Visio.Application

Dim vis_docs As Visio.Documents
Dim vis_doc As Visio.Document

Dim vis_pages As Visio.Pages
Dim vis_page As Visio.Page

Dim vis_shapes As Visio.Shapes
Dim vis_shape As Visio.Shape

'// こっからそれぞれのオブジェクトをセットしていく
Set vis_app = Application

'// ドキュメント
Set vis_docs = vis_app.Documents
For Each vis_doc In vis_docs
MsgBox "ドキュメント名:" & vis_doc.Name

Set vis_pages = vis_doc.Pages
For Each vis_page In vis_pages
MsgBox "ページ名:" & vis_page.Name

Set vis_shapes = vis_page.Shapes
For Each vis_shape In vis_shapes
MsgBox "図形名:" & vis_shape.Name
Next
Next
Next
End Sub

大体感触がつかめただろうか?