カミは死んだ

Paper Is Dead ... osz

Programmatic Visio Generation - CellsSRCの引数を確認

はじめに

IronPythonを用いたVisioファイル自動生成の3回目です。今回は設定したいプロパティとCellsSRCの引数との関係について書きます。

マクロの記録からリバースエンジニアリング

これまで書いてきたIronPythonからVisioファイルを操作するコード記述は、VBAのそれとそっくりさんです。VBAを知っている方でしたら、ActivePage、や、DrawRectangle、等にピンとくるかもしれません。このことからVisio上で設定したい処理を、マクロの記録、でVBAに変換すれば所望の処理のVBA記述が確認できる(ハズ)です。

マクロの記録

さっそくマクロの記録からのVBAコードを生成してみましょう。

まず『ファイル』-『オプション』から『開発モードで実行する』をチェックします。

f:id:hassyy:20141125004215p:plain

これでリボンに『開発』タブが現れます。

f:id:hassyy:20141125004537p:plain

『マクロの記録』を押したら適当な名前でマクロの記録を開始します。

f:id:hassyy:20141125004916p:plain

VBAコードを見たい処理を行います。 例えば、『デザイン』タブから『ページ設定』-『ページのプロパティ』で『寸法の単位』を『インチ(10進法)』として『OK』を押下します。

f:id:hassyy:20141125005349p:plain

その後、『開発』タブの『記録の終了』を押下してマクロの記録を終了します。

f:id:hassyy:20141125005457p:plain

記録したマクロは『マクロ』で指定後『編集』を押せばコードが確認できます。

f:id:hassyy:20141125005845p:plain

このようなコードが得られたと思います。

f:id:hassyy:20141125010246p:plain

CellsSRCの引数確認

ページ設定の寸法をインチ指定した際に得られたVBAコードにはCellsSRCを含む行が2つあります。

Application.ActivePage.PageSheet.CellsSRC(visSectionObject, visRowPage, visPageScale).FormulaU = "1 in"
Application.ActivePage.PageSheet.CellsSRC(visSectionObject, visRowPage, visPageDrawingScale).FormulaU = "1 in"

何やら詳細は不明ですが、右辺で "1 in"(1インチ)を指定していることからページ設定の寸法をインチ指定しているのでしょう。このCellsSRCに含まれる引数の文字列の値を確認できれば実際の引数の値が分かります。そこで、Debug.Print、を使って値を確認しましょう。 上記2行の後に、以下の2行を追加します。

Debug.Print visSectionObject, visRowPage, visPageScale
Debug.Print visSectionObject, visRowPage, visPageDrawingScale

その後、『表示』から『イミディエイトウィンドウ』を選択してから、F5を押下してマクロを実行します。

f:id:hassyy:20141125011731p:plain

画面下部のイミティエイトウィンドウにはDebug.PrintしたCellsSRCの引数の値が表示されます。

f:id:hassyy:20141125012008p:plain

1 10 4

1 10 5

が得られました。 前回のIronPythonコードで記述したCellsSRCの引数の値と見比べましょう。

# ページ設定の寸法をインチに指定
page.PageSheet.CellsSRC(1, 10, 4).FormulaU = "1 in"
page.PageSheet.CellsSRC(1, 10, 5).FormulaU = "1 in"

確かに一致していますね。めでたしめでたし。

今日はここまで

マクロの記録からリバースエンジニアリングすることで所望の設定に必要なCellsSRCの引数の値が確認できる話をしました。リバースエンジニアリング、といえば聞こえは良いですが残念な人がやる人海戦術みたいなものです。所望の設定に対応するCellsSRC一覧、のようなものが資料としてまとまっているなら教えてほしいところです...osz。

とはいえ、今回のやり方さえわかれば、あとはVisioファイル生成に必要な自分のやりたい処理をどんどんIronPythonに落としていけると思います。

次回は、自分がVisioファイル自動生成する目的を書こうかなと思っています。