こちらで公開している非常に個人的なCATVBA用ライブラリ "KCL" を
修正・追加しました。
非常に個人的なCATVBA用ライブラリ - C#ATIA
公開しているサンプルマクロでも特にSelectItem関数を利用しているのですが、
今まではこんな記載方法をしていました。
・・・ Dim HB As HybridBody Set HB = KCL.SelectItem(Msg, Array("HybridBody")) ・・・
自分で作っておきながら、第二引数をバリアントな文字型配列に限定して
いましたが、毎回配列を書くのが面倒な為、文字型でも利用可能にしました。
上記の場合はこんな感じでOKです。
・・・ Dim HB As HybridBody Set HB = KCL.SelectItem(Msg, "HybridBody") ・・・
又、 ","(コンマ)区切りの文字列で複数タイプの指定を出来るようにしました。
・・・ Dim AnyOj As AnyObject Set AnyOj = KCL.SelectItem(Msg, "HybridBody,Body") ・・・
これは、戻り値が異なるだけの SelectElement関数も同様です。
もちろん今まで通り、第二引数にバリアントな文字型配列を渡してもOKです。
もう一つ、新たに "CanExecute関数" を作りました。
本来マクロを実行する際ドキュメント(ファイル)が開かれているのかどうか? を
チェックすべきでしたが、今までサボったコードを公開していました。
又、実行するマクロに対してアクティブなドキュメントが正しいものかどうかも
チェックすべきで、異なっている場合はエラーとなります。
(DrawなマクロをPartで実行する等)
使い方としてはこのような感じです。
・・・ If Not CanExecute("DrawingDocument") Then Exit Sub ・・・
恐らくCATMainの先頭部分に記述する事になるかと思います。
引数にドキュメントのオブジェクトタイプを文字列で指定してください。
ファイルが開かれていない場合はこのようなダイアログが出ます。
指定したドキュメントタイプ以外のものがアクティブな場合は、このような
ダイアログが出ます。
又、複数のドキュメントタイプで利用できるマクロの場合は、上記のSelectItem関数
同様に文字型配列やコンマ区切りの文字列で引数を渡してください。
・・・ If Not CanExecute("PartDocument,ProductDocument") Then Exit Sub 又は If Not CanExecute(Array("PartDocument", "ProductDocument")) Then Exit Sub ・・・
他にIsStringAry,IsFilterType,ToStrVriAry関数等も追加していますが、
ライブラリ内で使用するもののため、説明は割愛します。(チェックが足りないかも)
サンプルマクロ程度であれば、程々のチェックでも・・・とは思っているのですが、
ライブラリとなると、普段書かないようなチェックコードまで書くので、何であれ
世の中のライブラリを公開されている方々は大変なんだろうなぁ と感じてます。
その為、何時までたっても "非常に個人的な" の文字が外せないでいます。
(言い逃れの為かも・・・)