Excelシートに記載されているCATIAデータを開くマクロ|CATIAマクロの作成方法
今回の記事はマクロ案募集よりいただいた内容です。
送って頂いた内容は以下のようなマクロです。
ワークベンチ:
アセンブリーデザインマクロ案:
エクセルの部品表から選んだ部品が開くマクロを作ることはできますでしょうか。
EXCELのネジ一覧表、シート毎にネジの種類が分けられた表を用意します。シートには、 同じ種類で径と長さが異なるネジが一覧表示されています。一覧表に「部品を開く」というボタンを設けます。表示したいネジが書かれたセルをクリックし、 そのボタンを押すと選んだネジが画面上に表示できないでしょうか 。
部品は、CATPartだけではなく、座金組込みねじなどにもにも対応したいのでCATProduct も開けるようにしたい考えです。ネジのCATIAデータは、 EXCELファイルと同じフォルダ内に格納します。 具体的に言いますと、シート「六角穴付きネジ」のとあるセルに「
SCREW-M2-L5_CB」と書かれていたとします。 このセルをクリックし「部品を開く」ボタンを押すと六角穴付きネジM2長さ5mmのネジ、「SCREW-M2- L5_CB.catpart」 が読み取り専用ファイルで開けるようにしたい。
なお、CATIAは起動済みという前提で考えています。
本サイトではCATIA VBAでExcelを操作する方法は紹介していますが、Excel VBAからCATIAを操作する方法もほとんど同じで、参照設定でCATIA関連のライブラリを読み込めば実行が可能になります。
今回はそういった点も含めてExcel VBAでCATIAを操作し、Excelに記載されているデータを開くマクロについて紹介していきます。
マクロの機能
今回作成したのはExcelに記載されている文字列と同じ名称のデータを開くマクロです。
Excelシート上で「部品を開く」ボタンを押すと、選択されているセルに書かれているデータが開かれます。具体的な機能は以下のとおりです。
・「部品を開く」ボタンを押したときに選択されているセルに書かれているデータを開く
・CATIAデータは読み取り専用で開く
・選択されているセルがA列かつ値が入力されている場合に限りマクロの実行が可能
・データを開いたらCATIAウィンドウを最前面にする
・Excelファイルと同じフォルダ内にCATIAデータが存在している必要あり
・CATIAが開かれていない状態でボタンを押しても実行しない(メッセージの表示)
今回のマクロはCATIA VBAではなくExcel VBAを使うため、まずは事前準備が必要です。
事前準備 (CATIAライブラリ読み込み)
まずは空のExcelファイル(ブック)を作成し、名前を付けて保存します。
このとき拡張子は[.xlsm]のExcelマクロ有効ファイルとして保存します。
次にExcel VBEの[ツール]タブ > [参照設定]よりCATIAライブラリを読み込みます。
読み込むべきはCATIA VBEで[ツール]タブ > [参照設定]に読み込まれている(チェックのついている)すべてのライブラリです。CATIAのライセンスによってはかなりの量ありますが、Excel側の参照設定で「CATIA V5 ○○○○」と書かれている全てのライブラリにチェックを付けておけばOKです。
サンプルコード
マクロのコードは以下のとおりです。
Excelの[開発]タブからVBEを起動し下記コードを入力します。コードの入力が完了したらシート上にボタンを作成し、入力したコード「Sub Push_Button()」を登録すれば準備は完了です。(Excelマクロのボタンや登録については検索すればたくさん出てくるのでわからない方はそれらを参照下さい。
セルを選択した状態でボタンを押せば該当のCATIAデータが開かれます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
Sub Push_Button() 'CATIAで開くBOLT名称を取得 If Selection.Cells.Count = 1 And Selection.Column = 1 And Selection.Value <> "" Then Dim BoltName As String BoltName = Selection.Value & "." Else MsgBox "選択セルが有効ではありません。" & vbLf & _ "A列の空白でないセルを1つだけ選択した状態で再実行して下さい。" Exit Sub End If 'Excelファイルのフォルダパスを取得 Dim myDir As String myDir = ActiveWorkbook.path 'BOLT名称と一致するファイル名を取得 Dim buf As String buf = Dir(myDir & "\*") Do While Len(buf) > 0 If InStr(buf, BoltName) <> 0 Then BoltName = buf Exit Do End If buf = Dir() Loop 'CATIAファイルのパス作成 Dim path As String path = myDir & "\" & BoltName '"' 'CATIA処理 Dim CATIA On Error Resume Next Set CATIA = GetObject(, "CATIA.Application") If CATIA Is Nothing Then MsgBox "CATIAを開いた状態で実行して下さい。" Exit Sub End If On Error GoTo 0 Call CATIA.Documents.NewFrom(path) Set CATIA = Nothing AppActivate "CATIA V5", True End Sub |
コード解説
CATIAで開くBOLT名称を取得
1 2 3 4 5 6 7 8 9 |
'CATIAで開くBOLT名称を取得 If Selection.Cells.Count = 1 And Selection.Column = 1 And Selection.Value <> "" Then Dim BoltName As String BoltName = Selection.Value & "." Else MsgBox "選択セルが有効ではありません。" & vbLf & _ "A列の空白でないセルを1つだけ選択した状態で再実行して下さい。" Exit Sub End If |
まずはセルに書かれているBOLT名称を取得します。
今回は選択セルが「1つ」「A列」「値が入力されている」場合にのみ有効となるよう条件分岐をしています。ここは自身にあったエリアが有効になるよう書き換えて下さい。
セルの値を取得したら文字列の一番最後にピリオド[.]を追加します。
これは「ファイル名.拡張子」の拡張子前についているピリオドを表しています。
後々わかりますがここは「.CAT」という文字列を追加しても問題ありません。これは「.CATProduct」「.CATPart」などCATIAファイルの拡張子が「.CAT」で始まるためです。
CATIAファイルのパス作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
'Excelファイルのフォルダパスを取得 Dim myDir As String myDir = ActiveWorkbook.path 'BOLT名称と一致するファイル名を取得 Dim buf As String buf = Dir(myDir & "\*") Do While Len(buf) > 0 If InStr(buf, BoltName) <> 0 Then BoltName = buf Exit Do End If buf = Dir() Loop 'CATIAファイルのパス作成 Dim path As String path = myDir & "\" & BoltName '"' |
つぎにExcelファイルの保存されているフォルダ内にあるCATIAファイルの名称を取得します。
Excelファイルと同フォルダ内の全てのファイルに対してループを行い、先ほど取得したBOLT名称(ピリオド付き)が含まれているファイルを探し出します。
開くCATIAファイルがCTAPartのみ、CATProductのみと決まっていればここの処理は必要ありませんが、今回のマクロではどちらかが確定されていないためこのような処理が挟まっています。
CATIAファイルの名称が取得できたらフォルダパスと組み合わせてフルパスを作成します。
CATIA処理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
'CATIA処理 Dim CATIA On Error Resume Next Set CATIA = GetObject(, "CATIA.Application") If CATIA Is Nothing Then MsgBox "CATIAを開いた状態で実行して下さい。" Exit Sub End If On Error GoTo 0 Call CATIA.Documents.NewFrom(path) Set CATIA = Nothing AppActivate "CATIA V5", True |
最後にCATIAをオブジェクトとして取得し、先ほど作成したパスを開きます。
CATIAを取得したら、以降の書き方はCATIA VBAと同じです。
※事前準備のところでやった参照設定がされていないとエラーが発生するので注意して下さい。
既存ファイルを読み取り専用で開くには「Documentsオブジェクト」の「NewFormメソッド」を使って下記のように書きます。
Call CATIA.Documents.NewForm(“パス”)
ファイルを開いたらAppActivateを使ってCATIAを最前面に表示するようにしています。
まとめ
今回はExcelシートに記載されているCATIAデータを開くマクロについての内容でした。
本マクロで一番重要なのはExcel VBAでCATIAを操作するためにCATIAライブラリを読み込ませる部分です。CATIA VBAでExcelライブラリを読み込むときは「Microsoft Excel ○○.○ Object Library」の1つだけでよかったですが、CATIAの場合はライセンスの兼ね合いもありかなり多くのライブラリを読み込む必要があります。
しっかりと読み込むのであればCATIA VBAに読み込まれているライブラリを全てメモしておきExcel VBAに読み込ませるのですが、数が数なので最悪「CATIA V5〜」と始まっているライブラリを全て読み込めば実行自体は可能になるはずです。