ユーザーパラメータの値をExcelに出力するマクロ|CATIAマクロの作成方法
今回は「お問い合わせ」より頂いた内容です。
送って頂いた内容は以下のようなマクロです。
マクロの中で検索項目を指定してPart内で取得したパラメータをEXCELに出力したい
(ユーザーパラメータの値を探し出してEXCELに転機する)
ユーザーが各自で作成したパラメータの値を取得し、Excelに書き出すマクロです。
今回は途中作成のコードも送っていただいたので、その内容を書き直していきます。
マクロの機能
今回作成したマクロは『ユーザーパラメータの値をExcelに出力するマクロ』です。
具体的な機能は以下のとおりです。
(ユーザーパラメータ = ナレッジ・アドバイザーで作成したパラメータ)
今回は頂いたコードから「ピン全長」「d1(呼び径)」という名前のパラメータの値を出力させますが、コード内にある「ピン全長」「d1(呼び径)」の部分を書き換えれば任意のユーザーパラメータの値を書き出すことができます。
サンプルコード
マクロのサンプルコードは以下のとおりです。
※下記コードはExcelライブラリを読み込んでいる必要があります。
未設定の方は「CATIAマクロでExcelを操作する方法」を参考に設定して下さい。
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 CATMain() If TypeName(CATIA.ActiveDocument) <> "PartDocument" Then MsgBox "CATPart内で実行してください。" Exit Sub End If On Error Resume Next Dim appExcel As Excel.Application Set appExcel = GetObject(, "EXCEL.Application") If Err.Number <> 0 Then Err.Clear Set appExcel = CreateObject("Excel.Application") End If On Error GoTo 0 appExcel.Visible = True Dim wb As Workbook Set wb = appExcel.Workbooks.Add Dim ws As Worksheet Set ws = wb.Sheets(1) Dim doc As PartDocument Set doc = CATIA.ActiveDocument Dim sel As Selection Set sel = doc.Selection CATIA.RefreshDisplay = False sel.Clear sel.Search ("ナレッジウェア.パラメータ.名前=ピン全長,all") ws.Cells(1, 1).Value = "ピン全長" ws.Cells(1, 2).Value = "呼び径" Dim i As Integer Dim Parm As Parameter For i = 1 To sel.Count Set Parm = sel.Item(i).Value ws.Cells(i + 1, 1).Value = Parm.ValueAsString Next i sel.Clear sel.Search ("ナレッジウェア.パラメータ.名前=d1(呼び径),all") For i = 1 To sel.Count Set Parm = sel.Item(i).Value ws.Cells(i + 1, 2).Value = Parm.ValueAsString Next i wb.Activate CATIA.RefreshDisplay = True End Sub |
コード解説
ここでは上記マクロコードのいくつかの部分を抜粋して解説していきます。
ドキュメントの定義
1 2 3 4 |
If TypeName(CATIA.ActiveDocument) <> "PartDocument" Then MsgBox "CATPart内で実行してください。" Exit Sub End If |
まず、はじめにアクティブドキュメントの定義をします。
今回のマクロはCATPartでのみ有効なものなので、アクティブドキュメントがCATPart以外の場合はTypeName関数を使った条件分岐でマクロを終了するようにしています。
Excel設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
On Error Resume Next Dim appExcel As Excel.Application Set appExcel = GetObject(, "EXCEL.Application") If Err.Number <> 0 Then Err.Clear Set appExcel = CreateObject("Excel.Application") End If On Error GoTo 0 appExcel.Visible = True Dim wb As Workbook Set wb = appExcel.Workbooks.Add Dim ws As Worksheet Set ws = wb.Sheets(1) |
次にExcelの設定を行います。
詳しくは「CATIAマクロでExcelを操作する方法」を参照下さい。
Excelにパラメータの値を書き出す
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
sel.Clear sel.Search ("ナレッジウェア.パラメータ.名前=ピン全長,all") ws.Cells(1, 1).Value = "呼び径" ws.Cells(1, 2).Value = "ピン全長" Dim i As Integer Dim Parm As Parameter For i = 1 To sel.Count Set Parm = sel.Item(i).Value ws.Cells(i + 1, 1).Value = Parm.ValueAsString Next i |
まずはSearchメソッドを使い「ピン全長」という名前のパラメータを全て選択状態にします。
あとはFor文を使って選択状態のパラメータの値を書き出していきます。
選択状態のパラメータは「パラメータ自体」を表しているので、「値」を取得するには「Parameterオブジェクト」の「ValueAsStringメソッド」を使って以下のように書きます。
Dim Parm As Parameter
Set Parm = sel.Item(i).Value ‘パラメータを取得
Dim ParmValue As String
ParmValue = Parm.ValueAsString ‘パラメータの値を取得
上記コードでは「ws.Cells(i + 1, 1).Value = Parm.ValueAsString」と、直接Excelのセルに書き出すようにしています。
これを「d1(呼び径)」でも同じ処理をすればExcelに全てのユーザーパラメータの値を書き出すことができます。
まとめ
今回は『ユーザーパラメータの値をExcelに出力するマクロ』についての内容でした。
いろいろコードを書いてきましたが、今回重要な部分は「パラメータの値を取得する」という部分です。(Excelでの操作はExcel VBAさえ理解できていれば非常に簡単なものです)
パラメータの値を取得するには「Parameterオブジェクト」の「ValueAsStringメソッド」を使います。引数なども特になく、「.ValueAsString」と書くだけなので「.Value」と同じ感覚で使うことができます。