シートセットマネージャ(SSM)の取得と編集|AutoCAD VBAマクロの作成方法

AutoCAD VBAでシートセットマネージャ(SSM)のシートタイトルや番号などの取得と編集を行うには、[AcSmComponents25 1.0 Type Library]を参照設定することで利用可能になる、AcSmSheetSetMgrオブジェクト、AcSmSheetSetオブジェクト、AcSmSubsetオブジェクトなどを利用する必要があります。本ページではこれらオブジェクトを使って指定のシートセットマネージャ内のサブセット、およびシートの情報を取得したり名前の変更をする方法を解説していきます。

本ページで学べる内容は以下のとおりです。

[AcSmComponents25 1.0 Type Library]について

 シートセットを取得する方法

 セット内のサブセットとシートを取得する方法
セット内のサブセットとシートの情報を編集する方法

AcSmComponents25 1.0 Type Library

VBAでシートセットマネージャを操作するには[AcSmComponents25 1.0 Type Library]の参照設定を行っておく必要があります。VBEの[メニューバー]>[ツール]>[参照設定]より参照設定ウィンドウを起動して[AcSmComponents○○ 1.0 Type Library](※○○はバージョンによる)の設定を行います。

このライブラリ(ACSMCOMPONENTS25Lib)には様々なオブジェクトが含まれており、それぞれのオブジェクトが持つメソッドを実行することでシートセットマネージャを操作することができます。その中でもAcSmSheetSetMgrオブジェクトは各オブジェクトにアクセスするためのオブジェクトで、下記のように記載することでAcSmSheetSetMgrオブジェクトを取得(作成)することができます。

 
ACSMCOMPONENTS25Lib オブジェクト 

シートマネージャの主要なオブジェクトとしてACSMCOMPONENTS25Libには下表のものが用意されています。これらオブジェクトが持つメソッドを実行することで、指定のサブセットやシートに対して名称や番号などの取得や編集の操作を行うことができるようになります。AcSmSheetSetMgrオブジェクトを使うことで下表の上から順にオブジェクトを取得していくことができます。

オブジェクト名 操作対象
AcSmDatabase シートセット データベース
AcSmSheetSet シートセット
AcSmSubset サブセット
AcSmSheet シート

これらオブジェクトは通常のオブジェクトとは違い、VBEのデバッグ環境(ローカル/ウォッチウィンドウ)で中身を確認することができません。中身を確認したい場合はDebug.Printなどでオブジェクトが持つ情報を明示的に描画しながらデバッグする必要があります。
 

シートセットの情報取得

AcSmSheetSetMgrオブジェクトからサブセット(AcSmSubset)やシート(AcSmSheet)にアクセスして、各要素が保持している情報を取得するには下記のようなコードを記載します。通常のVBAオブジェクトの構造とは違い、「Enumerator」という”コレクション内の要素を一つずつ順番に処理するための仕組み“を使ってオブジェクトの取得を行う必要があります。(※GetAllComponents関数参照)

下記コードの処理を実行することで、指定のシートセットファイル内のサブセットとシート情報を取得して、イミディエイトウィンドウに各要素の名称を出力することができます。

.dstファイルの取得

シートセットファイル(.dst)はAcSmSheetSetMgrオブジェクトのOpenDatabaseメソッドもしくはFindOpenDatabaseメソッドで取得が可能です。いずれも引数に取得したいdstファイルのフルパスを指定することで、そのシートセットァイルのシートセット データベースオブジェクト(AcSmDatabase)にアクセスすることができます。このAcSmDatabaseに対してGetSheetSetメソッドを実行することでシートセットオブジェクト(AcSmSheetSet)の取得ができます。

FindOpenDatabaseメソッドは指定のdstファイルが既に開かれている必要があります。OpenDatabaseメソッドは指定のdstファイルを開いて取得するメソッドですが、第2引数をFalseとすることで既に開かれていてもシートセット データベースの取得が可能になり、Trueの場合は既に指定のdstファイルが開かれている場合にはエラーが発生します。状況に応じてこれらメソッドを使い分けることで任意のパターンでdstファイルを取得するという処理を実装することができます。
 

シートセットの情報編集

前項の内容で取得したシートセット内の各要素(サブセット、シート)の情報を編集するには下記のようなコードを記載します。(オブジェクトの取得部分は前項のものと同じ) 情報取得時はGetNameメソッドやGetTypeNameメソッドのようなGet~系のメソッドを利用していましたが、編集する場合はSetNameメソッドSetNumberメソッドのようなSet~系のメソッドを利用します。

下記コードの処理を実行することで、指定のシートセットファイル内のサブセットとシートの名称の接尾に一括で”-1″を付与することができます。SSMでは編集したあと[Ctrl+Z]などで元に戻すことはできないので注意が必要です。(コード内に修正用の処理もコメントで入れています)

編集時のロック/アンロック

各オブジェクトを編集するには、そのオブジェクトにロックをかける必要があります。これは、同じファイルが別の端末から同時に呼び出された場合に、編集の衝突を防ぐための機能です。処理としては対象のオブジェクトを持つAcSmDatabaseに対してLockDbメソッドを実行します。このメソッドの引数にロックしたいオブジェクトを指定すると、そのオブジェクトにロックがかかり、編集できるようになります。 編集が終わったらオブジェクトのアンロックをして元に戻す必要もあります。アンロックはLockDbメソッドと同じ考え方でUnlockDbメソッドを実行するだけです。

 

まとめ

今回の内容をまとめると以下のとおりです。

 SSMの操作は[AcSmComponents○○ 1.0 Type Library]の参照設定が必要
 シートセットの各オブジェクトはAcSmSheetSetMgrオブジェクトから順に取得可能
シートセットの各オブジェクトは「Enumerator」の仕組みを使って取得する必要がある

オブジェクトの取得ができたらGet~/Set~系のメソッドで操作が可能
 編集するにはオブジェクトのロック/アンロックが必要

本ページではシートセットマネージャ(SSM)の取得と編集する方法についての内容でした。
SSMのオブジェクトは少し特殊な作りとなっており、一般的なVBAオブジェクトのように扱うことができません。そのため内容としては少し難しい内容となっていますが、オブジェクトの取得さえできればあとは各オブジェクトが持つメソッドを使って操作するだけです。メソッドはオブジェクトブラウザーやAutoDesk公式ヘルプなどを確認することで調べることができます。
 

メインページへ戻る
 

 関連書籍

 Autodesk公式リンク

参考:シートセット マネージャのオブジェクトの概要(SSO)

AutoCAD, VBA

Posted by Lic