VBA

またもやVBAをいじってます。
で、今日のメモ書きはVisioのシェイプをウィンドウ中央に表示する方法。
スーパーpre記法は便利だ…。

Sub ShapeScrollTest()
' windowオブジェクトのScrollViewToメソッドを使った処理
' 選択したシェイプを中央に表示する
 
  Dim i As Integer
  Dim nShapes As Integer
  Dim subShape As Visio.Shape
  Dim objWindow As Window
 
  Dim dShapeX As Double
  Dim dShapeY As Double
 
' 選択したシェイプの情報取得
  ' 選択しているシェイプの情報取得
  nShapes = Application.ActiveWindow.Selection.Count
  ' 選択されていない、もしくは複数選択されている場合、エラーを表示
  If (nShapes <> 1) Then MsgBox "1個のシェイプを選択して実行してください。", vbOKOnly + vbExclamation: End
 
  Set subShape = Application.ActiveWindow.Selection.Item(1)
 
  ' シェイプの座標を内部単位で習得
  dShapeX = subShape.Cells("PinX").Result(visNumber)
  dShapeY = subShape.Cells("PinY").Result(visNumber)
 
  ' アクティブなウィンドウをオブジェクトに格納(不要かも)
  Set objWindow = Application.ActiveWindow
 
  ' ウィンドウを指定座標にスクロールする
  objWindow.ScrollViewTo dShapeX, dShapeY
 
End Sub

シェイプの位置はシェイプシートのデータから引き出して、
それをScrollViewTo関数に突っ込むだけ。
注意点はシェイプシートからデータを取り出す時に内部データとして取り出す必要がある。
内部データとして取り出す際は、Resultの引数にvisNumberを指定する。