CATIA VBAで別プロジェクト(.catvba)のマクロを実行する方法|CATIAマクロの作成方法

CATIAマクロを作成していて今開発しているプロジェクト(.catvba)ではなく、別プロジェクトにあるマクロを実行したい状況に出くわすことがあります。Excelマクロでいえば、いま開いているブック(.xlsm)とは別のブック内にあるマクロを実行したいといった感じです。

たしかにマクロを1つのプロジェクトにまとめていくとゴチャゴチャになりますし、大規模なマクロを組む場合はプロジェクト別に分けておくのが基本です。そんな中、「あっちのプロジェクトに入ってるマクロを実行させたいな」となった時に、コードを現在編集しているプロジェクトにわざわざコピペして持ってきたりしていないでしょうか。

CATIA VBAには別プロジェクトのコードを実行させるための機能が備わっています。
という訳で今回はそんな別プロジェクト(.catvba)のマクロを実行する方法を解説していきます。

 

ExecuteScriptメソッド

CATIAマクロで別プロジェクトのマクロを実行するには「SystemServiceオブジェクト」の「ExecuteScriptメソッド」を使用します。

このメソッドは実行したいマクロの情報(プロジェクト名やモジュール名)を引数として入力することで、その情報をもとにマクロを実行することができます。

コードとしては下記のような構文になっています。

 icon-code ExecuteScriptメソッド 

SystemService.ExecuteScript (プロジェクト名, _
                  プロジェクトタイプ, _
                  モジュール名, _
                  プロシージャ名, _
                  引数)

詳しい使い方はコード解説の項で説明していきます。

ちなみに上記コードにより別プロジェクトのマクロを実行しても、マクロライブラリとして登録はされません。ただVBE上では別プロジェクトも開かれるため、2つのプロジェクトを同時に編集することができるようになります

 

サンプルコード

ExecuteScriptメソッドを使ったサンプルコードです。
下記コードをコピペして、マクロの情報であるパスや名称の文字列、引数の内容などを自身のものに合わせればそのまま実行できます。

 

コード解説

SystemService定義

CATIA VBAで別プロジェクトを実行するには「SystemService」オブジェクトを使用します。
このとき「As SystemService」と宣言すると以降のメソッドでエラーが発生するのでVariant型で宣言しておく必要があるので注意しましょう。
 

プロジェクト名/モジュール名/プロシージャ名定義

つぎに実行したいマクロの情報を入力します。
※存在しない文字列(パス/名称)を入力した場合はエラーが発生します

プロジェクト名: 実行したい別プロジェクトのフルパス  
モジュール名 : 実行したいモジュール名
プロシージャ名: 実行したいプロシージャ名

 
上記コードの場合、デスクトップ上にある「other_project.catvba」内の「Module1」にある「CATMain」が実行されることになります。
 

引数定義

つぎに実行したいマクロの引数を入力します。

引数がある場合は、引数の数だけの要素が入る配列を用意して順に格納していきます。
たとえば実行したいマクロの引数が2つある場合は上記のように「ReDim arguments(1)」として2つの要素が入る配列を用意します。(配列は0スタート)

そして「arguments(0)」には第1引数、「arguments(1)」には第2引数を格納します。
実行したいマクロの引数の数に応じて適宜配列の要素数と中身を設定して下さい

サンプルコードでは文字列のみを扱っていますが、通常の関数と同じようにオブジェクトを渡すこともできます。オブジェクトを引数として格納するにはSet arguments(0) = オブジェクト」のようにSetが必要なので注意しましょう。

引数がない場合も空の配列を用意しておく必要があるので注意しましょう。
※上記コードのコメント状態を解除すれば2つの引数あり.Verとして、
 コメント状態そのままで引数なし.Verとして実行することができます。
 

マクロ実行

最後にこれまで定義した情報をもとにマクロを実行します。マクロの実行は「SystemServiceオブジェクト」の「ExecuteScriptメソッド」を使い下記のように書きます。

 icon-code ExecuteScriptメソッド 

SystemService.ExecuteScript (プロジェクト名, _
                  プロジェクトタイプ, _
                  モジュール名, _
                  プロシージャ名, _
                  引数)

プロジェクト名モジュール名, プロシージャ名, 引数 にはこれまで定義したものを入力します。

プロジェクトタイプには下記のいずれかを入力することができます。
「catScriptLibraryTypeDocument」
「catScriptLibraryTypeDirectory」
「catScriptLibraryTypeVBAProject」
今回はVBAProject(.catvba)なので「catScriptLibraryTypeVBAProject」を入力します。

これにより引数として入力した内容から別プロジェクトのマクロを実行することが可能になります。

 

まとめ

今回はCATIAマクロで別プロジェクトのマクロを実行する方法についての内容でした。

別プロジェクトのマクロを実行するには、実行したいマクロの情報を引数として「SystemServiceオブジェクト」の「ExecuteScriptメソッド」を実行するだけです。

 icon-code ExecuteScriptメソッド 

SystemService.ExecuteScript (プロジェクト名, _
                  プロジェクトタイプ, _
                  モジュール名, _
                  プロシージャ名, _
                  引数)

ライブラリとして登録されるわけではありませんがVBE上には別プロジェクトも合わせて表示されるため、2つのプロジェクトを同時に編集することができます。
 

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

 

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

2022年7月28日CATIA, CATIAマクロ

Posted by Lic