【入門編】Visio標準コマンドをVBAから直接実行する:Application.DoCmdを活用した手動操作の自動化 – Visio VBA解析バイブル

スポンサーリンク

Visio VBAの「禁じ手」を使いこなせ:DoCmdで標準機能を呼び出す極意

こんにちは。Visioの世界へようこそ。
マクロの記録ボタンを押して、生成されたコードを眺めて「これでいいのかな?」と首を傾げたことはありませんか?

VisioのAPIは強力ですが、実はすべての機能がメソッドとして提供されているわけではありません。開発者が直面する最大の壁、それは「UI上のあのボタンを、どうやってコードで叩くのか?」という問いです。

今日は、そんな悩みを一発で解決する「Application.DoCmd」という魔法の杖について解説します。これを知れば、あなたの自動化スキルは一気にプロの領域へ踏み込むことになりますよ。

1. DoCmdとは何か?:標準機能への「直通電話」

Visioのオブジェクトモデルには、`Page.Drop`や`Shape.Delete`といった正攻法のメソッドがありますが、これらだけでは手が届かない機能があります。「整列」「配置」「特定のダイアログの表示」など、UI操作に依存する機能です。

`Application.DoCmd`は、Visioの標準コマンドIDを指定することで、「マウスでボタンをクリックしたのと全く同じ挙動」をコードから強制的に実行させるメソッドです。

なぜDoCmdを使うのか?

  • APIが存在しない機能を呼び出せる: 複雑なUI操作を数行のコードに凝縮できる。
  • 挙動の安定性: Visio内部のコマンドを直接叩くため、手動操作と全く同じ結果が得られる。
  • 開発コストの削減: 複雑な計算アルゴリズムを自分で書く必要がない。

2. 実践:DoCmdを使ってみよう

まずは、最も利用頻度が高い「図形の整列」と「全選択」を例に見てみましょう。

Sub DoCmd_Example()
‘ Visioのアプリケーションインスタンスを取得
Dim appVisio As Visio.Application
Set appVisio = Application

‘ 1. ページ内の全図形を選択 (Ctrl + A の操作)
appVisio.DoCmd visCmdSelectAll

‘ 2. 選択した図形を「左揃え」にする (配置コマンド)
‘ ※Visioのバージョンや環境によってはコマンドIDが効くものと効かないものがあります
appVisio.DoCmd visCmdAlignLeft

‘ 3. ページ設定ダイアログを表示する
‘ APIでパラメータを一つずつ設定するより、ダイアログを出す方が早い場合も多い
appVisio.DoCmd visCmdPageSetup
End Sub

コードの解説

  • `visCmd…`: これがコマンドIDです。Visioには数百種類のコマンドIDが用意されています。
  • 注意点: `DoCmd`は「今、ユーザーが操作可能であること」を前提としています。つまり、図形が選択されていない状態で「整列」を実行しても、何も起きない(あるいはエラーに近い挙動になる)ことがあります。「コマンドを実行する前に、対象を選択しておく」という手順が鉄則です。

3. 陥りやすい罠と「プロの作法」

初心者がよくハマるポイントを伝授します。ここさえ押さえれば怖くありません。

① コマンドが「使用不可」のとき

VisioのUI上でグレーアウトしているボタンは、`DoCmd`で実行しても無視されます。

  • 対策: `DoCmd`を呼ぶ前に、`Selection`オブジェクトを使って対象図形をアクティブにし、コマンドが実行可能な状態であることを担保してください。

② エラーハンドリングは必須

`DoCmd`は、実行環境のUI状態に依存します。例えば、ダイアログを表示させたままプログラムが次の処理に進もうとすると、処理が競合してクラッシュすることがあります。

On Error Resume Next
appVisio.DoCmd visCmdSomeCommand ‘ 不安定な操作
If Err.Number <> 0 Then
Debug.Print “この操作は現在実行できません: ” & Err.Description
End If
On Error GoTo 0

③ コマンドIDの調べ方

すべてのコマンドIDは、Visioのオブジェクトブラウザで `Visio.VisUICmds` を検索すると一覧が出てきます。ただし、すべてがVBAから叩けるわけではありません。「使えそうなものから試す」という探索的なアプローチも、現場エンジニアの重要なスキルのひとつです。

4. チーフアーキテクトからのアドバイス

`DoCmd`は非常に強力ですが、「多用しすぎないこと」も大切です。
APIが用意されている機能(例えば図形の位置座標の変更など)は、なるべく `Shape.Cells(“PinX”).Formula` 等を使って直接値を操作してください。`DoCmd`はあくまで、「APIでは手が届かない最後の手段」として使うのが、保守性の高いコードを書く秘訣です。

「自動化=手動操作の置き換え」ではなく、「自動化=Visioのポテンシャルを最大限に引き出すこと」。

この視点さえ忘れなければ、あなたはもう単なる「マクロ記録ユーザー」ではありません。Visioの挙動をコントロールする、真の自動化エンジニアです。

何か分からないことがあれば、いつでも聞いてくださいね。あなたの開発が、より美しく、そして効率的なものになることを応援しています。

タイトルとURLをコピーしました