CATDrawingのテキストの値をシート名にリンクさせる方法
少し前に「シート名を変更するとそれに追従して、特定のテキストの値もシート名に変換したい」というお問い合わせをいただきました。これは結論から言ってしまえば、CATIAのVBAマクロを使うことで実現は可能です。
ただマクロの場合、実行ボタンを押したり、ショートカットキーを押したりというようなマクロを実行するための”なんらかの操作”が必要になります。
シート名を変えるたびに毎回その”なんらかの操作”をするのは面倒です。
イメージとしてはCATPartで「式」を使ってパラメータ同士の値を紐づけるように、シート名を変更したら何もせずとも自動でテキストが変わるようにしたいところです。
というわけで今回は「ナレッジ・アドバイザーワークベンチ」の「リアクション(Reaction)」という機能を使って、シート名を変更したら自動で任意のテキストの値をシート名に変更するような機能を作っていきます。
多少のVB知識も必要になってきますがコピペだけでも動くようになってはいるので興味のある方はぜひ試してみてください。
リアクション(Reaction)とは
そもそもあまり「リアクション」を使ったことがないという人もいると思うので、どういったものなのかを簡単に説明しておきます。
リアクション(Reaction)は「ナレッジ・アドバイザーワークベンチ」内にあるコマンドで、任意の条件になった時に指定した処理を自動で行わせることができる機能です。
たとえば、リアクションでは下記のようなことができます。
・要素が更新されたときに特定のパラメータの値が変わってたらメッセージを表示
・Productが挿入されたときに指定したパーツ番号以外の場合は挿入を削除
と、さまざまなことが出来るので使いようによってはかなり便利な機能です。
今回はこのリアクションの発動条件を「シート名を変更したとき」とし、実行する処理は「特定のテキストの値をシート名にする」とします。
リアクションの設定
では実際にリアクションを設定していきましょう。
あまり使わないという人も多いと思いますが、CATDrawingからでもナレッジ・アドバイザーワークベンチに切り替えることができます。
新規CATDrawingを作成しワークベンチを[ナレッジウェア]>[ナレッジ・アドバイザー]で切り替えます。
ツールバーの[リアクティブフィーチャー]の中から[リアクション]をクリックすると下記のようなウィンドウが表示されます。この中の[ソース:]内でリアクションの発動条件を指定し、[アクション:]内で実行する処理を指定します。
リアクション発動条件の設定
まずはリアクションの発動条件を設定します。
今回設定する発動の条件は「シート名が変更されたとき」です。
ソースタイプを「選択」にして、「シート名が変更したとき」に該当するシートをクリックします。ここでクリックしたシートのシート名が変わった時がリアクションの発動条件になります。)
シートをクリックすると下図のような[ソースを選択]ウィンドウが表示されます。
ここには選択したシートに紐づくパラメータがすべて表示されます。
この中から「Alias」を選択して[OK]ボタンをクリックします。
[OK]ボタンをクリックすると先ほどのウィンドウに戻り、[ソース:]内に「Alias」がいることが確認できます。あわせて[利用可能なイベント:]が「ValuChange」になっていることを確認しておきましょう。
上画像のようになっていれば発動条件の設定は完了です。
今設定した内容を簡単にいうと、ソースとして選択したシート「Alias」の値(Value)が変化(Change)したときに発動させるという設定をしました。シート名を変更すると「Alias」の値も変化するので、これで結果として「シート名が変更したとき」を発動条件とすることができたという訳です。
リアクション処理を設定
発動条件が設定できたのであとはテキストの値を変更するという処理を設定していきます。処理自体は「ナレッジウェアアクション」と「VBアクション」のどちらかの方法で設定できます。ナレッジウェアアクションはナレッジで使用できる言語、VBアクションはVBSで処理内容を記載します。
ここでは「VBアクション」で処理コードを書いていきます。
下記コードを[アクション:]内の[VBアクション]にチェックを付けてからペーストしてください。
自動で入力されている「Sub main」と「End Sub」の間に貼り付けて下さい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Dim sht As DrawingSheet Set sht = CATIA.ActiveDocument.Sheets.ActiveSheet Dim vw Dim txt For Each vw In sht.Views If vw.Texts.Count <> 0 Then For Each txt In vw.Texts If txt.Name = "link_txt" Then txt.Text = sht.Name End If Next End If Next |
最終的に下画像のようになっていれば[OK]ボタンを押して完了です。
間違えて「Sub main」「End Sub」を消してしまった場合は手入力するか、一度[ナレッジウェアアクション]に切り替えてると復活するはずです。
このコードでは「[link_txt]という名前の[テキスト]の値を、アクティブシートのシート名と同じにする」という処理になっています。つまり、先に設定したシートの名前が変わるたびにこの処理が毎回自動で実行されるような設定がされたという訳です。
実際に動きを確認
ではこれまでに設定したリアクションがうまく機能しているかを確認しましょう。
適当にテキストを作成して、シート名と紐づけたいテキストの名前をフィーチャープロパティより「link_txt」にします。link_txtは複数個あっても問題なく、すべてシート名と紐づきます。
これですべての準備が完了したので、実際にシート名を変えてみましょう。
シート名を変えて、「link_txt」の値も同じように変換されていれば完成です。
ただ、あくまでも「link_txt」の値が変換されるタイミングはシート名が変わった瞬間だけです。
「link_txt」の値を手入力で書き換えた後、シート名を変更していないと「シート名 ≠ link_txt」となるので注意して下さい。
まとめ
今回はナレッジ・アドバイザーの「リアクション」を使って、シート名にテキストの値を紐づける方法を紹介しました。
ナレッジ関連はあまり使わないという人も多いですが使いようよってはかなり便利なものなので、使いたいときに使えるように内容だけは簡単に理解しておくことをオススメします。
VBアクションに記載していた処理コードは基本VBAと同じです。
VBAに関しては「【CATIA応用知識】VBAマクロの作成方法まとめ」ページでいろいろ解説しているので、興味のある方はマクロの勉強も合わせてやってみることをオススメします。
これを理解することで、リアクションで実行できる処理内容の幅が一気に広がります。
VBA(VBS)もナレッジ関連も初めて触る人にとっては難しい内容だとは思いますが、それ以上にリターンも大きいのでぜひこっちの分野にも足を踏み入れてみて下さい。