前回はPythonからVisioを起動しました。
今回はその逆!
VisioのVBAからPythonを呼び出して、今開いているページに「Hello Python!」を表示します。

どっちからどっちを呼ぶって?

Visioを開いて、そこからPythonを呼ぶイメージだよ!
① Pythonのコードを準備する
まずはメモ帳に次のコードを入力します。
import win32com.client
# 起動中のVisioに接続
visio = win32com.client.GetActiveObject("Visio.Application")
# 現在のページを取得
page = visio.ActivePage
# 四角形を描いて文字を設定
shape = page.DrawRectangle(1, 1, 4, 2)
shape.Text = "Hello Python!"
# 枠線を消す
shape.CellsU("LinePattern").FormulaU = "0"
hello.py という名前で保存します。
※前回インストールしたpywin32を使用します。
VisioのVBAからPythonを呼び出す
Visioで図面を開き、VBAの画面を表示します。
- Visioの図面から開発タブを選択します。
- Visual Basicエディタを開きます。
- 開いている図面を選択、右クリックして標準モジュールを挿入します
- エディタに以下のコードを入力します。
Sub RunPython()
Shell "py ""C:\PythonTest\hello.py""", vbNormalFocus
End Sub
※C:\PythonTest\hello.py は実際の保存先に変更してください。

実行してみよう!
VisioのVBAで RunPython を実行します。
すると……
今開いているVisioのページに「Hello Python!」が登場!

成功です!ヽ(´▽`)/
どんな仕組みで動いているの?
今回の流れはこんな感じです。
Visio VBA → Shell → Python → pywin32 → COM → Visio
VBAの Shell でPythonを起動し、PythonからCOMを使ってVisioに接続しています。
つまり、VisioからPythonを呼び出して、そのPythonがVisioを操作しているんですね。
ちょっと遠回りに見えますが、これならPythonの豊富なライブラリをVisioの自動化に活用できそうです!
さて、次は何を作ろうかな?( ̄ー ̄)ニヤリ

