実現したいこと
Visio Professional 2024を使い始めました。
以前のバージョン(Visio Professional 2021以前)では、[図形と面積と外周の長さ] というアドオンがあり、これを使うことで、選択している図形の長さや面積を求めることができました。複数の図形を選択している場合は、合計の長さ、合計の面積を求めることができました。
しかし、Visio Pro 2024 では仕様変更か、このアドオンが消えたようです。
そこで、Visio VBA を使って、同じ機能を実現できないかと画策しています。
発生している問題・分からないこと
Visio VBA で以下のコードを作ると、図面内にある1番目の図形の面積を求めることができます。
※仕様上、長さの値は「平方インチ」で出てくるので「cm^2」に換算するために 2.54^2倍しています。
VBA
1Sub 面積の表示() 2 MsgBox Round(ActivePage.Shapes(1).AreaIU * 2.54 ^ 2, 5) & "(cm^2)" 3End Sub
以下のようにすれば図面内の全ての図形の面積の合計値を求めることができました。
VBA
1Sub 合計面積の表示() 2 Dim N As Long, i As Long, S As Double 3 N = ActivePage.Shapes.Count 4 S = 0 5 6 For i = 1 To N 7 S = S + ActivePage.Shapes(i).AreaIU * 2.54 ^ 2 '平方インチをcm^2に換算 8 Next 9 10 MsgBox Round(S, 5) & "(cm^2)" 11End Sub
ところが、上記の方法で求めることができるのは、あくまでも「図面内の1番目の図形」や「図面内の全ての図形」の面積だけです。
沢山の図形が存在する図面内で「選択している図形の面積」を求めるにはどうすれば良いでしょうか?
(なお、複数の図形を選択している場合は選択している図形の面積の合計値を出したいです)
また、このプログラムを自作アドインとして、他の図面上でも実行できるようにしたいです。
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
このようにしたところ実行時エラーになってしまいます。
VBA
1Sub test() 2 MsgBox ActiveWindow.Selection.AreaIU * 2.54 ^ 2 3End Sub
補足
こちら( http://www.interq.or.jp/chubu/r6/visio/DVS_18_Drawing_with_Automation840.htm )で触れられている selection を使うことも試みましたが、
VBA
1Sub test2() 2 Dim selectObj 3 4 Set selectObj = ActiveWindow.Selection 5 If selectObj.Count = 0 Then 6 MsgBox "先に図形を選択してください。", , "図形を選択してください" 7 Else 8 MsgBox selectObj.Shapes(1).AreaIU * 2.54 ^ 2 9 End If 10 11End Sub
というコードだと、エラーになります。Selection の中にある Shape を指定する方法が分からず、詰まっています。

回答1件
あなたの回答
tips
プレビュー