テキストを自動的に修正する

ヘッダ部分など、共通の単語、文章を全ページに渡って表示したい場合がある。
そんな時Excelなら、「=Sheet1!.A1」などとすれば、Sheet1シートのA1セルの文字列が表示されるわけだけど、Visioでこれと同じようなことをするのは結構大変である。

# 実は簡単な方法があって、それを私が知らないだけかもしれないけど・・

  1. Visioを起動し、新規文書を作成する(デフォルトでは「ページ - 1」が作成されているハズ)
  2. 「ページ - 1」上に、四角形ツールで一つ四角形を作成します
  3. その四角形を「右クリック」→「書式」→「オブジェクト情報」とします
  4. 「名前」欄に「Sheet.1」などと表示されているので、「MasterMyText」と変更します
  5. ページの挿入を行います(ページ名は「ページ - 2」となるハズ)
  6. 「ページ - 2」上にも四角形ツールで一つ四角形を作成します
  7. 同じようにオブジェクト情報を選択し、名前を「MyText」と変更します
  8. Alt+F11で、マクロエディタを開きます
  9. プロジェクトエクスプローラのThisDocumentをダブルクリックします
  10. 要素のテキストが変更された時に呼ばれるCallBack関数を作成します(以下のコードをコピペしてください)

Private Sub Document_ShapeExitedTextEdit(ByVal Shape As IVShape)
On Error Resume Next

If Shape.Name = "MasterMyText" Then
Dim shpObj As Visio.Shape
Dim pageObj As Visio.Page

For Each pageObj In ActiveDocument.Pages
Set shpObj = pageObj.Shapes.Item("MyText")
If Not shpObj Is Nothing Then
shpObj.Text = Shape.Text
End If
Next
End If
End Sub

これで、「ページ - 1」に作成したテキストボックスの内容を変更すれば、「ページ - 2」に作成したテキストボックスも変更されるようになります。Visioばんざい。