ユーザーパラメータの値をExcelに出力するマクロ|CATIAマクロの作成方法
今回は「お問い合わせ」より頂いた内容です。
送って頂いた内容は以下のようなマクロです。
マクロの中で検索項目を指定してPart内で取得したパラメータをEXCELに出力したい
(ユーザーパラメータの値を探し出してEXCELに転機する)
ユーザーが各自で作成したパラメータの値を取得し、Excelに書き出すマクロです。
今回は途中作成のコードも送っていただいたので、その内容を書き直していきます。
マクロの機能
今回作成したマクロは『ユーザーパラメータの値をExcelに出力するマクロ』です。
具体的な機能は以下のとおりです。
(ユーザーパラメータ = ナレッジ・アドバイザーで作成したパラメータ)
今回は頂いたコードから「ピン全長」「d1(呼び径)」という名前のパラメータの値を出力させますが、コード内にある「ピン全長」「d1(呼び径)」の部分を書き換えれば任意のユーザーパラメータの値を書き出すことができます。
サンプルコード
マクロのサンプルコードは以下のとおりです。
※下記コードはExcelライブラリを読み込んでいる必要があります。
未設定の方は「CATIAマクロでExcelを操作する方法」を参考に設定して下さい。
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
コード解説
ここでは上記マクロコードのいくつかの部分を抜粋して解説していきます。
ドキュメントの定義
If TypeName(CATIA.ActiveDocument) <> "PartDocument" Then
MsgBox "CATPart内で実行してください。"
Exit Sub
End If
まず、はじめにアクティブドキュメントの定義をします。
今回のマクロはCATPartでのみ有効なものなので、アクティブドキュメントがCATPart以外の場合はTypeName関数を使った条件分岐でマクロを終了するようにしています。
Excel設定
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にパラメータの値を書き出す
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」と同じ感覚で使うことができます。











