[初級編]マクロ作成の流れ1|CATIAマクロの作成方法
マクロを作成する方法はさまざまですが、ここでは初心者でも作りやすい『マクロの記録』を利用した作成の流れを解説していきます。
マクロの作成方法だけでなくVBAの書き方にも少し触れるので、VBAが完全初心者でも何となくは理解できる内容になっています。
ただVBAの知識が完全に0からスタートすると全くついていけないという可能性もあるので、まずは情報の多いExcelマクロを簡単に学習し、内容をある程度理解してからこのページを読むことをオススメします。
今回のマクロでは以下の構文を使います。
・Subプロシージャ Sub () ~ End Sub
・変数宣言 Dim 変数名 As データ型
・変数に代入 変数名 = 値 / Set 変数名 = 値
・ループ文 For ~ Next
・条件分岐文 If Then ~ End If
・GoTo文 GoTo Label
・メッセージボックス MsgBox
・インプットボックス InputBox
それぞれの構文の内容については深く説明していないので、わからない場合はVBAの本や他サイトを参考にしてください。(書き方が同じなのでExcelマクロの本を参考にしてもOKです。)
これらの構文は完全に理解しておく必要はありませんが、ある程度の書き方は知っていたほうが理解しやすくなります。逆に上記の構文の内容を理解している方は、今回やっていく内容もすぐに理解できると思います。
完成マクロのイメージ
今回作成するマクロは、『入力した個数分の形状セットを一括で作成するマクロ』です。
今回、作成するマクロの機能をまとめると以下のとおりです。
・入力された数値が1~10でない場合は「入力値がNG」とメッセージを表示
・入力値がNGの場合、マクロは終了せずに個数の入力画面に戻る
・形状セットを作成後「〇個作成しました」というメッセージを表示
・作成する形状セットはアクティブな形状セットの中に作成
これらの機能はループ文や条件分岐などの基本的なVBAコードで作成していくためマクロ初心者やVBA勉強したての人が作成するにはかなりオススメのマクロとなっています。
マクロの勉強をするにはちょうどいいマクロですよ!
マクロ作成の流れは1からがっつりと解説していくのでいくつかのページに分割して解説していきます。このページでは『マクロの記録で基礎となるコードの用意』『記録したコードの内容確認』の説明をしていきます。
作成するマクロの基礎コードを用意
マクロは0から書き始めるのもいいですが、初心者のうちはまず始めに基礎となるコードを用意しておいたほうが作成がしやすいです。
そのためここでは『マクロの記録』を利用して基礎コードを用意していきます。
マクロの記録で基礎となるコードを取得する
まずは『マクロの記録』で [形状セット]のコードを取得していきます。
ここでは「形状セットを1つ作成」という操作を記録します。
(『マクロの記録』の使い方は『マクロの記録と実行』を参照ください)
すると以下のようなコードが取得できると思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Sub CATMain() Dim partDocument1 As PartDocument Set partDocument1 = CATIA.ActiveDocument Dim part1 As Part Set part1 = partDocument1.Part Dim hybridBodies1 As HybridBodies Set hybridBodies1 = part1.HybridBodies Dim hybridBody1 As HybridBody Set hybridBody1 = hybridBodies1.Add() part1.Update End Sub |
コードを取得したらそのコードを実行して、形状セットが作られることを確認しておきましょう。
変数名を変更する
つぎに変数名を変更していきます。
マクロの記録では変数名がデータ型と同じ名前(変数名がpartDocument1でデータ型がPartDocumentのように)で記録されます。
このままでも問題なく実行することはできますが、これからコードを書いていく上で混乱を避けるために変数名を自分のわかりやすい名前に変更しておきます。このページではそれぞれの変数名を以下のような名前に変更します。
partDocument1 ⇒ DOC
part1 ⇒ PT
hybridBodies1 ⇒ HBs
hybridBody1 ⇒ HB
変数名を書き換えたコードは以下のとおりです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Sub CATMain() Dim DOC As PartDocument Set DOC = CATIA.ActiveDocument Dim PT As Part Set PT = DOC.Part Dim HBs As HybridBodies Set HBs = PT.HybridBodies Dim HB As HybridBody Set HB = HBs.Add() PT.Update End Sub |
書き換えたら確認としてもう1回度実行してみましょう。
ここでエラーが出る場合はどこか変更忘れをしているのでよく確認してみて下さい。
(間違っている行に黄色いラインが入るのですぐにわかると思います)
これで基礎となるコードを用意することができました。
コードの内容を読み取る
つぎにこのコードではどのような処理をしているのかを読み取っていきます。
これからコードを書き足していくうえで、どの行で何を実行しているのかを理解できていないと基礎コードの意味がありません。
ここでは基礎コードに何が書かれているのか1行1行確認しながら見ていきましょう。
※下のコードは説明のためハイフン[-]でブロックごとに分けています。
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 |
Sub CATMain() '①-----------------------------' Dim DOC As PartDocument Set DOC = CATIA.ActiveDocument '②-----------------------------' Dim PT As Part Set PT = DOC.Part '③-----------------------------' Dim HBs As HybridBodies Set HBs = PT.HybridBodies '④-----------------------------' Dim HB As HybridBody Set HB = HBs.Add() '⑤-----------------------------' PT.Update End Sub |
基本的にどのブロックも『Dim 変数名 as データ型』『Set 変数名 = 〇〇』の構文を使っていることから、「変数の宣言」と「宣言した変数に何かを代入」をしていることがわかります。
それでは各ブロックで何を宣言して、何を代入しているのかを順に読み取っていきましょう。
ブロック①
Dim DOC As PartDocument
Set DOC = CATIA.ActiveDocument
はじめの行ではデータ型が『PartDocument』の『DOC』という変数を宣言しています。
『PartDocument』はそのままの意味で パーツドキュメントのことを意味しています。
次の行では1つ前の行で宣言した『DOC』に『CATIA.ActiveDocument』を代入しています。
これもそのままの意味で『CATIAのアクティブなドキュメント』のことを意味しています。
つまり、この行では『DOC』に『アクティブなパーツドキュメント』を入れるという処理を行っています。
ブロック②
Dim PT As Part
Set PT = DOC.Part
はじめの行では先ほどと同じようにデータ型が『Part』の『PT』という変数を宣言しています。
次の行では『PT』に『DOC.Part』を代入しています。
DOCの中にはさきほど『CATIA.ActiveDocument』を入れたので、『DOC.Part』を省略せずに書くと『CATIA.ActiveDocument.Part』ということになります。
つまり、この行では『PT』に『アクティブなパーツドキュメントの中にあるパート』を入れるという処理を行っています。
上記2つのブロックのコードの内容をまとめると、それぞれ下の画像のようなイメージになります。
DOCにはアクティブなパーツドキュメントが、PTにはDOCの中のパートが入っている状態です。
つまり、はじめの2つのブロックでは作業中の場所(言い換えればマクロを実行する場所)を変数として定義したということになります。
これからマクロで操作のコードを書いていきますが、その中の多くのコードはどこで実行するかも一緒に書く必要があります。今回定義した『DOC』と『PT』はその時に使うための変数だと思っておけば大丈夫です。
ブロック③
Dim HBs As HybridBodies
Set HBs = PT.HybridBodies
はじめの行では『HBs』という、データ型が『HybridBodies』の変数を宣言しています。
あとで『HybridBody』というデータ型も出てきますが、『HybridBodies』はその複数形にあたります。
実はこの『HybridBody』とは『形状セット』を意味しています。
分からないコードの調べ方は後述しているので、いまは『HybridBody』=『形状セット』ということを頭に入れて読み進めていってください。
『HybridBodies』のように複数形になっているデータ型の変数はCollectionオブジェクトといい、変数の後ろに「.Add」や「.Count」などを付けることで、そのオブジェクトを追加したり数を数えたりすることができます。
『HybridBodies』の場合でいうと形状セットを作成したり、ツリーにつられている形状セットの個数を数えたりすることができます。
次の行では『HBs』に『PT.HybridBodies』を代入しています。
『PT.HybridBodies』とはPTの『HybridBodyコレクション』を意味しています。
PTにはこれ以外のコレクションも多く存在しますが、形状セットの場合はこの『HybridBodyコレクション』の中に作成します。
つまり、この行では『HBs』に『CATIA.ActiveDocument.Part.HybridBodies』、言い換えると『アクティブなパーツドキュメント内のHybridBodyコレクション』を入れるという処理を行っています。
ブロック④
Dim HB As HybridBody
Set HB = HBs.Add()
はじめの行では『HB』という、データ型が『HybridBody』の変数を宣言しています。
『HybridBody』とは先にいったとおり形状セットのことを意味しています。
次の行では先ほどやったCollectionオブジェクトの操作「.Add」が行われています。
『HBs.Add()』というコードで形状セットを作成して『HB』に代入しています。
そのため、こここで作成した形状セットは変数でいうと『HB』ということになります。
「この行で本当に形状セットを作っているの?」という方は確認として『Set HB = HBs.Add()』を削除してマクロを実行してみるとよくわかります。
エラーは発生せずに実行することができますが、形状セットの作成は行われません。
ブロック⑤
PT.Update
最後のブロックでは『PT』に更新をかけています。
マクロで何かを作成した直後は更新がかからないため、「.Update」と書いてPTを更新させる必要があります。( [手動更新モード]がオンになっているイメージです)
今回の場合でいえばこの行がなくてもマクロは正常に実行することができます。
ただ、最終的な結果が以下のように変わってしまうので注意が必要です。
左側が『PT.Update 』を書いた場合、右側が書かない場合の結果です。
今回の場合はこの行がなくても実行はできるのでいいですが、この後に様々なコードを書いていく上で『PT』が更新されていないことでうまく動作しないものも出てきます。
そのため基本的には何か作成したらこの1行は書くということを覚えておきましょう。
わからないコードが出てきたら
おそらく今後マクロを作っていく上で何を意味しているのか分からない言葉が数多く出てきます。(今回でいうと『HybridBody』のように)
その場合は以下の3通りの方法で自分ひとりで調べることができます。
・ヘルプで調べる
・書籍で調べる
・『マクロの記録』で予測する
ヘルプで調べる
よくわからないコードは、VBE上で[F1]を押すことで起動するヘルプから確認することができます。(※全て英語で書かれています)
ここには使えるすべてのコードが書かれています。
またオブジェクトのプロパティやメソッドもすべて書かれているので、マクロを理解している方であればこのヘルプだけでわからない言葉だけでなく、その使い方なども調べることがます。
ただ専門的な言葉が多く使われているので、初心者の方には少しい難しい内容になっています。
書籍を利用する
ヘルプの内容は少し内容が難しいので、読んで理解できなかった場合は『目次』でも紹介している書籍の利用をオススメします。
『HybridBody』で書籍内検索すると以下のような文が出てきました。
『VB Scripting for CATIA V5: How to program CATIA macros』(Kindle版)p.68より
「geometrical set is HybridBody」という文から『HybridBody』=『geometrical set』であるということがわかります。英語環境でやっている方ならわかると思いますが『geometrical set』とは『形状セット』のことを意味しています。
つまり『HybridBody』は『形状セット』のことであるということがわかります。
ヘルプよりも噛み砕いた内容で説明してくれるので初心者の方は書籍で調べる方がオススメです。
『マクロの記録』で予測
『マクロの記録』をうまく使えば、その言葉が何を意味しているのか予測できる場合もあります。
今回の場合でいえば「形状セットの作成のみ」を記録しているため、『HybridBody』=『形状セット』というのは何となく予想することができます。
また似たような違うコマンドの操作を記録することで、より深い予測をすることができます。
たとえば [ボディー]コマンドで形状セットと同じように「ボディーを1つ作成」という操作を記録してみます。すると以下のようなコードが取得できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Sub CATMain() Dim partDocument1 As PartDocument Set partDocument1 = CATIA.ActiveDocument Dim part1 As Part Set part1 = partDocument1.Part Dim bodies1 As Bodies Set bodies1 = part1.Bodies Dim body1 As Body Set body1 = bodies1.Add() part1.Update End Sub |
形状セットのときと見比べると『HybridBody』が『Body』に、『HybridBodies』が『Bodies』に変わっているだけでそれ以外の内容は全く一緒なことがわかります。
このことから形状セットは『HybridBody』でボディーは『Body』というコードを使うんだなということが予測できると思います。
このように『マクロの記録』をうまく使うことでわからない言葉でもある程度の予測はできます。
ただ、あくまでも予測でしかないので、確実性を求めるのであればヘルプか書籍を使ってしっかり調べることが重要です。