CATDrawing内の指定した図枠(2D構成要素)を一括で削除するマクロ|CATIAマクロの作成方法
今回は「マクロ案」よりいただいた内容です。
送って頂いた内容は以下のようなマクロです。
ワークベンチ:ドラフティング
マクロ案:
CATIA図面のシート背景に入れた図枠を削除するマクロを組みたいです。
図枠の要素はディティールシートにあるものを並べており、それぞれオブジェクトに名前がついています。
マクロの機能
今回作成したのはCATDrawing内の指定した図枠(2D構成要素)を一括で削除するマクロです。
マクロとしてはかなり単純な構造となっていますが、使い方によってはかなり便利なマクロです。
考え方としては「削除したいオブジェクトをすべて選択し削除する」という手動操作と同じことをやっているだけなので、今回は図枠として考えていますがコードを少し書き換えればどのオブジェクトにも対応させることができます。
このマクロの機能をまとめると下記の通りです。
(削除するのはインスタンス作成した2D構成要素で、オリジナルの2D構成要素は残す)
・アクティブでないシート内にあるものもすべて削除する
サンプルコード
マクロのコードは下記のとおりです。
サンプルコードの場合、アクティブドキュメント内の「図枠A0」という名称の2D構成要素のからインスタンスされたものを一括で削除することができます。オリジナルの2D構成要素(ディティールシート内にある「図枠A0」)は削除されません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Sub CATMain() 'アクティブドキュメント定義 If TypeName(CATIA.ActiveDocument) <> "DrawingDocument" Then MsgBox "このマクロはDrawingDocument専用です。" & vbLf & _ "CATDrawingに切り替えて実行してください。" Exit Sub End If Dim doc As DrawingDocument Set doc = CATIA.ActiveDocument '削除するオブジェクトを選択 Dim sel As Selection Set sel = doc.Selection sel.Clear sel.Search ("(名前=*図枠A0* & ドラフティング.2D構成要素インスタンス),all") '選択しているオブジェクトを削除 sel.Delete End Sub |
コード内の「図枠A0」の部分を任意の名称に書き換えれば、図枠に限らずインスタンスで作成されている2D構成要素を一括で削除することができます。
インスタンス作成後にオリジナルの2D構成要素の名称を変更しても、インスタンス作成した側の2D構成要素の名称は変更前のものになり、コードがうまく実行しなくなるので注意して下さい。(もし上記コードで削除されない場合はインスタンスした2D構成要素の名称をプロパティで確認してみて下さい)
コード解説
アクティブドキュメント定義
1 2 3 4 5 6 7 8 9 |
'アクティブドキュメント定義 If TypeName(CATIA.ActiveDocument) <> "DrawingDocument" Then MsgBox "このマクロはDrawingDocument専用です。" & vbLf & _ "CATDrawingに切り替えて実行してください。" Exit Sub End If Dim doc As DrawingDocument Set doc = CATIA.ActiveDocument |
まずはじめにアクティブドキュメントの定義をします。
今回のマクロはCATDrawingでのみ有効なものなので、アクティブドキュメントがCATDrawing以外の場合はTypeName関数を使った条件分岐でマクロを終了するようにしています。
条件分岐の先、つまりはアクティブドキュメントがCATDrawingの場合は変数「doc」にアクティブドキュメントを代入します。
削除するオブジェクトを選択
1 2 3 4 5 6 |
'削除するオブジェクトを選択 Dim sel As Selection Set sel = doc.Selection sel.Clear sel.Search ("(名前=*図枠A0* & ドラフティング.2D構成要素インスタンス),all") |
VBAでのオブジェクトの削除は基本下記の流れで行います。
ということでここでは①と②の「Selectionオブジェクトの定義」と「削除するオブジェクトを選択状態にする」を行っています。
今回は名称の決まった2D構成要素なので、SelectionオブジェクトのSearchメソッドで、該当のオブジェクトをすべて選択状態にしています。
SearchメソッドはCATIAの 検索機能([Ctrl]+[F])と同じ考えで使用できるので、名称やタイプ、色などから削除したいオブジェクトをまとめて選択状態にすることができます。
上記コードでは名前に「図枠A0」が含まれている「ドラフティングワークベンチ」内の「2D構成要素インスタンス」をすべて選択するようになっています。ここのコードを書き換えれば任意のオブジェクトをまとめて選択状態にすることがでるので都合のいいものに書き換えて下さい。(コードの書き方などの詳細はSelectionオブジェクトページを参照下さい)
「sel.Clear」では現在の選択状態を一旦すべて解除しています。
これはSearchメソッドを実行する前にこの一文を書いておかないと、手動で選択したオブジェクトがある場合に選択されたままになり一緒に消されてしまうためです。
選択しているオブジェクトを削除
1 2 |
'選択しているオブジェクトを削除 sel.Delete |
前項で削除したいオブジェクトのみを選択状態にしているので、Deleteメソッドを使って現在選択状態のすべてのオブジェクトを削除します。
まとめ
今回はCATDrawing内の指定した図枠(2D構成要素)を一括で削除するマクロについてでした。
今回の内容に限らずCATIA VBAで何かしらのオブジェクトを削除する場合にはSelectionオブジェクトのDeleteメソッドを使用します。これはCATDrawingに限らずCATPartの場合も同じです。
① Selectionオブジェクト定義
② 削除するオブジェクトを選択状態にする
③ SelectionオブジェクトのDeleteメソッドで選択状態のオブジェクトを削除
オブジェクトの選択は今回出てきた「Searchメソッド」だけでなく「Addメソッド」でも可能です。
CATIA VBAではかなり基本かつ重要な処理なのでぜひ覚えておきましょう。