使用されていない画層を一括削除するマクロ|AutoCAD VBAマクロの作成方法

今回のサンプルマクロはアクティブの図面(ドキュメント)内で使用されていない画層を一括削除するマクロです。この機能自体はAutoCAD標準の[名前削除](PURGE)コマンドで用意されていますが、VBAで行うことで削除の条件(例えばロックしている画層は対象外など)を付与することが可能になります。
 

マクロ機能

 icon-wrench マクロの機能まとめ  ・アクティブな図面内で使用されていない画層を一括削除する
・削除前に確認メッセージを表示する

 

サンプルコード

マクロのサンプルコードは下記のとおりです。
実行すると現在アクティブとなっている図面に対して処理が実行されます。

コード解説 

使用されていない画層の取得

画層が使用されているかの判定はLayerオブジェクトのUsedプロパティで判定することができます。ただし、このプロパティを使う前にLayersオブジェクトのGenerateUsageDataメソッドを実行しておく必要があります。このメソッドは画層が使用中かどうかを示すデータを作成するためのメソッドで、実行しないとUsedプロパティで取得できる値が最新の情報でない場合があるため注意が必要です。

アクティブな図面内に存在する画層はLayersオブジェクト内ループをすることで、すべての画層(Layerオブジェクト)にアクセスすることができます。画層が使用されていない場合(UsedがFalse)は削除対象としてコレクションに格納しています。(確認メッセージが不要であればここで削除でも可)

 
画層の削除

画層の削除はLayerオブジェクト(Entityオブジェクト)のDeleteメソッドを実行することで削除することができます。このとき削除対象の画層がアクティブになっていると削除をすることができなくなるため、アクティブの画層を「0」に切り替える処理を実行しています。

アクティブな画層を切り替えるには「ThisDrawing.ActiveLaye」に対象のLayerオブジェクトを入力することで切り替えられます。ここでは確実に存在する画層0を代入して切り替えを行っています。

 icon-code  現在の画層の変更  

ThisDrawing.ActiveLayer = ThisDrawing.Layers.Item(0) 

 

まとめ

今回のマクロはAutoCADの標準機能として用意されていますが、VBAでも再現できるというところが重要です。VBAを使うことでExcelなど別のアプリケーションと連携させることができるためExcelシートに記載されている画層だけを削除したり、使用されていない画層のうち名前に指定の文字列を含む画層のみを削除したりなど、より細かい処理を設定することができます。

メインページへ戻る
 

 関連書籍

AutoCAD, VBA

Posted by Lic