ExcelマクロでCATIAを操作する方法|CATIAマクロの作成方法
今回はExcelマクロでCATIAを操作する方法を解説していきます。
CATIAとExcelを連携することで仕事内容によっては非常に効率を上げることができます。
今回学ぶことのできる内容は以下のとおりです。
ExcelマクロでCATIAを操作する方法
また、本ページの内容とは逆パターンの、CATIAマクロでExcelを操作する方法も紹介しているので合わせて参照ください。
ExcelマクロからでもCATIAマクロからでも“どちらのアプリケーションから実行するか”くらいの違いしかなく、やることは自体は変わりません。
ただ、大きい違いとしてExcelマクロの場合はExcelのファイル(ブック)ごとにマクロファイルが別々となりますが、CATIAマクロの場合はcatvbaという1つのファイルにまとまっているという点があります。こういった内容も踏まえて、自身の使い勝手の良い方法を使用してください。
CATIAマクロの事前準備
まずExcelマクロでCATIAを操作するには以下の2つの準備をする必要があります。
① Excelマクロ内にCATIAマクロのライブラリを読み込む
② ExcelマクロのコードにCATIAを呼び出すための構文を書く
Excelマクロ内にCATIAマクロのライブラリを読み込む
大前提として基本的にはExcelマクロはExcelの操作しかできません。これはCATIAマクロもAccessマクロも同じでそれぞれのアプリケーションしか操作できないようになっています。
マクロはVBAのオブジェクトを操作することで、それに対応するアプリケーションのオブジェクトを操作するような仕組みになっています。
たとえばExcelの場合はVBAの「Sheet」というオブジェクトを操作してシートの名前を変更することが出来ますし、CATIAの場合でいえばVBAの「Document」というオブジェクトを操作することでドキュメントを保存したり、閉じたりすることができます。
このように各マクロはそれぞれのアプリケーション内の操作する対象物を「オブジェクト」として用意しています。そして、これらのオブジェクトは『ライブラリ』というものにまとめられています。ExcelマクロはExcelのオブジェクトがまとめられたライブラリが、CATIAマクロはCATIAのオブジェクトがまとめられたライブラリがそれぞれ設定されています。
というわけで、ExcelマクロでCATIAを操作するにはCATIAのオブジェクトを読み取ることができるようExcelマクロに対して『CATIAのライブラリ』を設定する必要があります。これを行わないとExcelのVBE上でCATIAのオブジェクトを書いても、Excelマクロがそれを理解することができないためオブジェクトとして認識されず操作することが出来ません。
『ライブラリ』とは簡単にいうとVBAのオブジェクトがまとめられた本のようなものです。
VBAはExcel、CATIA、PowerPoint、Accessなど様々なアプリケーションに用意されています。
そして、それらのアプリケーションにはそれぞれ特有の”固有オブジェクト”があります。
(たとえばExcelでいえば「セル」、パワーポイントでいえば「スライド」、CATIAでいえば「サーフェス」のようにそのアプリケーションでしか使わないオブジェクトのこと)
これら全ての固有オブジェクトを1つのライブラリにまとめてしまっては、あまりにも量が膨大すぎて非常に扱いづらいものとなってしまいます。
そのためライブラリは各アプリケーションや各機能ごとに分けて用意されています。
このライブラリをアプリケーション(Excel)に読み込ませることで、別のアプリケーション(CATIA)を操作するマクロを作成することができるようになります。
ライブラリの設定
ライブラリの設定はVBEの「参照設定」より確認することができます。
まずはCATIAマクロに対してどのようなライブラリが設定されているかを確認します。
CATIAのVBEのメニューバーから[Tools]>[References…]をクリックすると以下のようなウィンドウが立ち上がります。このウィンドウ内でチェックのついているものが現在CATIAに設定されているライブラリです。
通常ライブラリは1つのアプリケーションに対して1つだったりするのですが、CATIAは見てもらえば分かるとおりで大量のライブラリが用意されています。CATIAはライセンスの関係上、人によって使用できる機能が違うため、機能やワークベンチ別にライブラリが小分けにされています。そのためこのように多くのライブラリが用意されているという訳です。
CATIAに設定されているライブラリが確認できたところで、次にExcelマクロに対してこれらのライブラリを設定していきます。
ExcelのVBEのメニューバーから[ツール]>[参照設定…]をクリックすると以下のようなCATIAの時と同じようなウィンドウが立ち上がります。
このウィンドウ内で先ほど確認したCATIAライブラリすべてにチェックを付けて適用させます。
本来であれば先ほど確認したものを1つずつチェックしていくのがベストですが、量が多く面倒なので「CATIA V5~」で始まるものすべてにチェックを付けるという考えでも問題ありません。
矢印キーで上下移動、スペースキーでチェックが付けられるので利用してみてください。
チェックを付け終わったらウィンドウ右側の[OK]を押せば完了です。
これでExcelマクロがCATIAのオブジェクトを理解することができるようになりました。
ExcelマクロのコードにCATIAを呼び出すための構文を書く
ライブラリの設定ができたら後は以下のコードを書くだけです。
コードを書かないとライブラリを読み込んでいいても、CATIAは使えないので注意してください。
Sub main()
‘実行したいCATIAの処理
End Sub
上記のようにCreateObject関数を使うことで「CATIA」という変数にCATIAをApplicationオブジェクトとして取得することができます。簡単にいえば上記コードを書いた以降ではCATIAのVBEで書いているコードをそのままコピペしても使用することが可能になります。
たとえば以下のコードを書くとCATIAのアクティブドキュメントの名称をExeclのシート1のA1セルに書き出すことができます。
Sheet1.Cells(1, 1).Value = CATIA.ActiveDocument.Name
サンプルマクロ「Excel記載の座標を取得し点作成」
ここではサンプルとして「Excelの表から座標を取得し点を作成するマクロ」を紹介します。
上画像のようにExcelのシート上に点の名前と座標を入力した状態で実行することで、シート2行目以降に書かれている全ての点を一括で作成することのできるマクロです。
コードは以下のとおりです。
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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
Option Explicit Sub main() Dim CATIA Set CATIA = CreateObject("CATIA.Application") If TypeName(CATIA.ActiveDocument) <> "PartDocument" Then MsgBox "CATPartに切り替えてからマクロを実行してください。" Exit Sub End If Dim doc As PartDocument Set doc = CATIA.ActiveDocument Dim pt As Part Set pt = doc.Part Dim ws As Worksheet Set ws = ThisWorkbook.ActiveSheet Dim ActiveObject As AnyObject If TypeName(pt.InWorkObject) = "HybridBody" Then Set ActiveObject = pt.InWorkObject Else Set ActiveObject = pt End If Dim hbs As HybridBodies Set hbs = ActiveObject.HybridBodies Dim newhb As HybridBody Set newhb = hbs.Add newhb.Name = ThisWorkbook.Name Dim MaxRow As Integer MaxRow = ws.Cells(Rows.Count, 1).End(xlUp).Row Dim i As Integer For i = 2 To MaxRow Dim PointName As String PointName = ws.Cells(i, 1).Value Dim Xvalue As Single Xvalue = ws.Cells(i, 2).Value Dim Yvalue As Single Yvalue = ws.Cells(i, 3).Value Dim Zvalue As Single Zvalue = ws.Cells(i, 4).Value Dim NewPoint As HybridShapePointCoord Set NewPoint = pt.HybridShapeFactory.AddNewPointCoord(Xvalue, Yvalue, Zvalue) newhb.AppendHybridShape NewPoint NewPoint.Name = PointName pt.Update Next i MsgBox "完了しました。" End Sub |
このサンプルマクロは「Excelの表から座標を取得し点を作成するマクロ」で紹介しているサンプルコードをExcelマクロバージョンに書き換えたものです。
コードを比較してみるとわかりますが、それぞれアプリケーションである「Excel」と「CATIA」の定義方法が違うだけでその他は全く同じコードになっています。
どこをどう書き換えるのかが理解できれば、その他のアプリケーションと連携する場合も同じ方法なのですぐに対応できるはずです。
まとめ
今回の内容をまとめると以下のとおりです。
ExcelマクロでCATIAを操作するには以下の2つを行う必要がある
① Excelマクロ内にCATIAマクロのライブラリを読み込む
② ExcelマクロのコードにCATIAを呼び出すための構文を書く
ExcelマクロでもCATIAを操作する書き方はCATIAマクロと同じ
ExcelマクロでCATIAを実行する際の最難関ポイントはライブラリ登録が面倒という点です。
しかしながらExcelマクロのほうが多くの人と共有しやすいので、そういった点ではCATIAマクロで作るよりも便利だったりすることもあります。
複数人で使う場合はExcelマクロ、個人的に使う場合はCATIAマクロという様に使い分けるのも良いと思ます。ただ結局のところ一番大事なのは”ユーザーが使いやすいかどうか”その一点につきます。
CATIAマクロでExcelを操作する方法も紹介しているので合わせて参照ください。
CATIAマクロを本気で勉強するなら
今回やった情報の少ない「CATIAとExcel」もしっかりと載っています。他にも「CATIAとPowerPoint」「CATIAとWord」の内容も記載されているので興味のある方にはオススメです。