空のシートを一括で削除するマクロ|CATIAマクロの作成方法

今回はお問い合わせより頂いた内容です。

件名:ドラフティングで空のシートを削除したい
ドラフティングでDITTを追加したり、いらなくなったDITTを削除できるようにはしたのですが、
削除した空のシートがマクロで削除できなく困っています。

本ページでは上記の通り、空のシートを一括で削除するマクロを紹介していきます。
処理の内容はかなりシンプルなのでマクロ初心者の方でも理解しやすい内容となっています。

 

マクロの機能

今回作成したマクロは冒頭でもいった通り「空のシートを一括で削除するマクロ」です。

具体的な機能は以下のとおりです。

  マクロの機能まとめ ・アクティブドキュメント内の空のシートをすべて削除
・削除後に何個のシートを削除したかを表示する

 

サンプルコード

マクロのコードは以下のとおりです。
コードを実行すると、アクティブドキュメント内の空シートをすべて削除します

 

コード解説

アクティブドキュメント確認

まず、はじめにアクティブドキュメントの定義をします。
今回のマクロはCATDrawingでのみ有効なものなので、アクティブドキュメントがCATDrawing以外の場合はTypeName関数を使った条件分岐でマクロを終了するようにしています。
 

アクティブドキュメント/Selectionの定義

アクティブドキュメントとSelectionの定義を行います。
Selectionオブジェクトはシート内で検索(Searchメソッド)を使うために定義します。
最終的にはシート内検索の結果から空のシートかそうでないかを判断します
 

削除するシートを格納するコレクションを用意

削除するシートを格納しておくためのコレクションを用意しておきます。
上記でもいったとおりシート内検索を行いますが、CATIA VBAでは削除する際にも検索する際にもオブジェクトを選択状態にする必要があります。

そのため、一旦削除するシートをすべてコレクションに格納し、全てを格納し終えてからまとめて削除するという処理の流れにしています。
 

空のシートをコレクションに格納

先ほど用意したコレクションに削除するシート(空のシート)を全て格納します。

空シートの判定はシート内で条件を絞らずに全てのオブジェクトに対しての検索を行ったときの「検索結果のオブジェクトの数」より行います。

シート内には削除ができない「絶対座標系」や「MainView」「BackgroundView」などの、計12個のオブジェクトが存在します。つまり、検索結果のオブジェクトの数が12個だった場合のみ空のシートであると判定することができます

この処理をアクティブドキュメント内のすべてのシートに対して行い、空シートと判断されたシートは「del_sht」コレクションに格納していきます。
 

コレクション内のシートを全て削除

最後にコレクション内のシートをすべて削除します。
ループ文を使ってコレクション内のシートをすべて選択した状態にしてから、「sel.Delete」でまとめて削除しています。

 

まとめ

今回は「空のシートを一括で削除するマクロ」についての内容でした。

処理自体はかなり単純で、重要なのは「空のシートをどのようにして判定するか」の部分だけです。

今回のマクロではオブジェクトの数で空のシートを判定しましたが、その他の方法もいくつかあると思うのでサンプルコードはあくまでも参考程度にご利用下さい。
 

サンプルマクロ集に戻る
目次へ戻る
 

icon-book CATIAマクロを本気で勉強するなら

CATIA, CATIAマクロ, VBA

Posted by Lic