🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Visio

VisioはMicrosoft 製品の一つで、 設計図やダイアグラムなど図を書くためのソフトウェアです。

Q&A

解決済

1回答

879閲覧

Microsoft Visio Stencil(VSSXファイル)を扱いたい

horiegom

総合スコア152

Visio

VisioはMicrosoft 製品の一つで、 設計図やダイアグラムなど図を書くためのソフトウェアです。

0グッド

0クリップ

投稿2022/01/17 10:08

Visioファイル(VSDX)ではなく、そのテンプレートである(VSSX)をVBAから扱いたいのですが、
ネット上では、1件もVSSX with VBAの情報を見つけられていません。

例えばVSDXファイルの場合、ファイル中の全オブジェクトにアクセスするには以下のコードで書けます

VBA

1 Set vsoDoc = vsoApp.Documents.Item(1) 2 3 For Each vsoPage In vsoDoc.Pages 4 For Each vsoShape In vsoPage.Shapes 5 6 何らかの処理 7 8 Next 9 Next 10

VSSXファイルの場合、同様の記載をしてもvso.Shapesが空で、
Msgbox "test"が実行されることはありません。

VBA

1 Set vssxDoc = vsoApp.Documents.Item(1) 2 3 For Each vsoPage In vssxDoc.Pages 4 For Each vsoShape In vsoPage.Shapes 5 6 msgbox "test" 7 8 Next 9 Next 10

そもそもVSSXファイルはVBAでは扱えないのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ネット上では、1件もVSSX with VBAの情報を見つけられていません。

確かに、Visioの情報は少ないですよね。

https://docs.microsoft.com/en-us/office/vba/api/visio.document.masters
https://docs.microsoft.com/en-us/office/vba/api/Visio.Masters
https://docs.microsoft.com/en-us/office/vba/api/visio.master

ちょっと手元にVisioがないのですが、
ステンシルにShapeという考えがあったかな?
と思っています。

Visioを初めて触った時にステンシルの概念がとっつきづらかったのですが、
ステンシルはマスターシェイプとかいうものがあった気がします。

Masters,Masterオブジェクトあたりを見てみたらどうですかね?


そのテンプレートである(VSSX)

.

.vstx (Visio テンプレート)
https://docs.microsoft.com/ja-jp/office/client-developer/visio/introduction-to-the-visio-file-formatvsdx

テンプレートというと、Visioテンプレート(.vstx)のことかな?と思ってしまいました・・

投稿2022/01/17 10:39

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

horiegom

2022/01/17 23:59

確かに、Masterあたりのオブジェクトを見ると良さそうですね。 検討してみます。
horiegom

2022/03/29 07:15

ようやく検討してみました。 仰る通り、Masterオブジェクトでした。 あるmastershape(v1.0.vssx)で作成されたvisioファイルを次のバージョンのマスターシェイプ(v1.1.vssx)に自動で更新する方法を調べています。 やりたいことは、vsdxのMasterをvssxのMasterに置き換えたいです。  vssx_Master = vssxMaster vsdx_shape.master = vssx_Master というコードで、マスターシェイプの更新が出来るかと考えたのですが、できませんでした。 あるシェイプのMasterを別のMasterに置き換える方法はあるでしょうか
退会済みユーザー

退会済みユーザー

2022/03/29 08:10

しばらく前の回答で、もう放置かと思っていました・・ > あるmastershape(v1.0.vssx)で作成されたvisioファイルを次のバージョンのマスターシェイプ(v1.1.vssx)に自動で更新する方法を調べています。 > あるシェイプのMasterを別のMasterに置き換える方法はあるでしょうか すでに図面に描画されている図形は古いため、ステンシルファイル(v1.1.vssx)内にある新しいマスターシェイプの図形で置き換えたいということですかね。 --- https://support.microsoft.com/ja-jp/office/図形を別の図形に置き換える-176a89ea-9638-4d35-b04b-6eddd0850016 Visioを利用する側としては、私自身、素人ですので・・ できないのかな?と思っていたらリンクのページを見つけました。 マクロからではなく、Visioのアプリケーションを操作して確認してみたところ、図形の置き換えができたようでした。 マクロから操作する場合は、Excelの「マクロの記録」と同じようにマクロが記録できますので、そちらからご自身で試してみると、今後のためにも良いかなと思いました。 Visioの開発タブ(マクロの記録)は次のリンクも見てみてください。 https://support.microsoft.com/ja-jp/topic/-開発-タブを表示する-e1192344-5e56-4d45-931b-e5fd9bea2d45 (手元でマクロの記録をしたところ、ShapeクラスのReplaceShapeメソッドを使う感じのようでした) https://docs.microsoft.com/en-us/office/vba/api/visio.shape.replaceshape
horiegom

2022/04/01 06:50

ありがとうございます。 ReplaceShapeメソッドで問題なく変換できました。 ただ、「ドロップ時に名前で同期する」(MatchByName)のチェックを外す必要がありました。 *外さないと、ReplaceShapeより同期が優先されて変更されない。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問