溶接の長さとその合計をメッセージボックスで表示するマクロ|CATIAマクロの作成方法

今回の記事は「お問い合わせ」でいただいた内容です。
送って頂いた内容は以下のようなマクロです。

マクロで複数のsheetとViewに作図された溶接記号のテキストフィールドに記入されたテキストを検出して、“各部品の溶接の長さの合計値”メッセージボックスに表示することは可能でしょうか?
 

 [溶接記号]をVBAで操作するには「DrawingWeldingオブジェクト」を使います。
基本的にはテキスト部のみを取得し合計の長さを計算するだけですが、テキスト部は”文字列””数字”が混同しているのでうまいこと分けてあげる必要があります。

 

マクロの機能

今回作成したのは溶接の長さとその合計をメッセージボックスで表示するマクロです。
対象はアクティブドキュメント内の全ての [溶接記号]です。
表示/非表示、シート/ビューなどは関係なく、存在する全ての [溶接記号]が対象です。

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

  マクロの機能まとめ ・溶接の長さとその合計をメッセージボックスで表示する
・対象はアクティブドキュメント内の全ての [溶接記号]
 (表示/非表示、シート/ビューなどは関係なく、存在する全ての溶接記号が対象)
・溶接記号のテキスト部が「X=000」のかたちのもの以外はカウントの対象外
 (Xは部品名等の”文字列”、000には溶接の長さである”数値”がはいる) 
・上記の数値部は「×」「+」を使った計算式も対応

基本的に条件分岐でいろいろ機能を分けているだけなので、自身の環境に合わない場合も大いにあります。サンプルコードはあくまでサンプルとしてコードを書き換えて対応してください。

 

サンプルコード

マクロのコードは以下のとおりです。

 

コード解説

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

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

つまり、アクティブドキュメントがCATDrawingの場合のみ変数「doc」にアクティブドキュメントを代入し、マクロの処理を続けます。
   

Selection定義

アクティブドキュメントが定義できたら、そのドキュメント内のSelectionを定義します。
この時、念の為「Clearメソッド」で現在の選択を全て解除しておきます。
  

溶接記号(DrawingWelding)をすべて取得

次にアクティブドキュメント内にある溶接記号(DrawingWelding)を全て取得します。
「welds」というコレクションを用意して、その中に格納していきます。

Selectionオブジェクトの「Searchメソッド」を使って、ドキュメント内の溶接記号を全て選択、選択状態のオブジェクトを全て「welds」に追加という処理を行うことで「welds」に全ての溶接記号が格納されます。
  

部品名/溶接長さをすべて取得

次に部品名/溶接長さを取得するために変数をいくつか用意します。
各変数の用途は上記のコメント文のとおりです。

計算用の変数「x,y,z」は溶接の長さとして「10×2」や「15+15」のような計算式が書かれている場合に使うための変数です。

変数が用意できたら「welds」内ループを行い、メッセージボックスに表示するためのメッセージ(msg)を作成していきます。

溶接記号のテキスト部にアクセスするには「weld.GetTextRange(catWeldingFieldThree)」というコードになります。(詳しくはDrawingWeldingオブジェクトページ参照)

あとは取得したテキストの値別に処理を分岐させます。
分岐の内容は上記のコメント文を見ればわかると思います。

取得した部品名と溶接の長さは「partName()」と「arcLength()」のなかに格納していきます。
ループの最後に格納した部品名と溶接の長さを使って、msg内に表示させたいメッセージになるようなかたちで入れ込んでいきます。

各部品の部品名と溶接の長さをmsg内に入れたら、最後に合計値も入れ込みます。
あとはこれまでに作成したメッセージをMsgBox関数で表示させる処理を追加すれば完成です。

 

まとめ

今回は溶接の長さとその合計をメッセージボックスで表示するマクロについての内容でした。

処理としては何か新しいものを作るわけでも操作するわけでもなく、存在しているオブジェクトから情報を抜き出しメッセージとして表示させているだけです。

テキスト部が”文字列””数字”が混同していて、それらを分別するための処理で複雑そうに見えているだけで、詳しくみていけば大した処理は行っていません。

大まかな処理の内容さえ理解できれば、自身の環境に合わせたマクロに書き換えることができるはずなので、いろいろ試してみてください。
 

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

 

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

2021年10月11日CATIA, CATIAマクロ, VBA

Posted by Lic