Excelの値を取得しProduct(インスタンス)の記述欄に書き出す|CATIAマクロの作成方法
今回の記事はマクロ案募集でいただいた内容です。
送って頂いた内容は以下のようなマクロです。
ディスクトップにエクセルシートを保存しておきエクセルのA1の値を読み込み
その値を取得して、下記のインスタンス名の記述に代入する
CATIA VBAでExcelを取得するには事前に多少の設定をする必要があります。
「CATIAマクロでExcelを操作する方法」もあわせて参照してください。
マクロの機能
今回作成したマクロは選択したExcelの「A1」の値を取得し、インスタンスProductの記述欄に書き出すマクロです。具体的な機能は以下のとおりです。
・「マクロ実行 → Product選択 → Excelファイル選択」の順で選択
サンプルコード
マクロのコードは以下のとおりです。
Option Explicit
Sub CATMain()
'アクティブドキュメント定義
If TypeName(CATIA.ActiveDocument) <> "ProductDocument" Then
MsgBox "CATProductに切り替えてからマクロを実行してください。"
Exit Sub
End If
Dim doc As ProductDocument
Set doc = CATIA.ActiveDocument
'Product定義
Dim sel 'As Selection
Set sel = doc.Selection
Dim filter(): filter = Array("Product")
Dim msg As String: msg = "プロダクトを選択して下さい。"
Dim status As String
status = sel.SelectElement2(filter, msg, False)
If status <> "Normal" Then
MsgBox "キャンセルしました。"
Exit Sub
End If
Dim pro As Product
Set pro = sel.Item(1).Value
'Excel定義
Dim appExcel As Excel.Application
Set appExcel = CreateObject("Excel.Application")
'ユーザーが選択したBook取得
Dim openFile As String
openFile = appExcel.GetOpenFilename(FileFilter:="Excelファイル,*.xlsx")
If openFile <> "False" Then
Dim wb As Workbook
Set wb = Workbooks.Open(openFile)
Else
MsgBox "キャンセルしました。"
Exit Sub
End If
'sheet定義
Dim ws As Worksheet
Set ws = wb.Sheets(1)
'セルA1の値を取得
Dim desc As String
desc = ws.Cells(1, 1).Value
'プロダクトの記述(インスタンス)に書き込み
pro.DescriptionInst = desc
'Bookを閉じる
wb.Close False
MsgBox pro.name + "の記述欄への書き込みが完了しました。"
End Sub
コード解説
アクティブドキュメント定義
'アクティブドキュメント定義
If TypeName(CATIA.ActiveDocument) <> "ProductDocument" Then
MsgBox "CATProductに切り替えてからマクロを実行してください。"
Exit Sub
End If
Dim doc As ProductDocument
Set doc = CATIA.ActiveDocument
まずはじめにアクティブドキュメントの定義をします。
今回のマクロはCATProductでのみ有効なものなので、アクティブドキュメントがCATProduct以外の場合はTypeName関数を使った条件分岐でマクロを終了するようにしています。
つまり、アクティブドキュメントがCATProductの場合のみ変数「doc」にアクティブドキュメントを代入し、マクロの処理を続けます。
Product定義
'Product定義
Dim sel 'As Selection
Set sel = doc.Selection
Dim filter(): filter = Array("Product")
Dim msg As String: msg = "プロダクトを選択して下さい。"
Dim status As String
status = sel.SelectElement2(filter, msg, False)
If status <> "Normal" Then
MsgBox "キャンセルしました。"
Exit Sub
End If
Dim pro As Product
Set pro = sel.Item(1).Value
次にProductを定義します。このProductの記述欄にExcelの値が書き出されます。
ここでは「Selectionオブジェクト」の「SelectElements2メソッド」を使って、ユーザーが選択したProductを定義します。
Excel定義
'Excel定義
Dim appExcel As Excel.Application
Set appExcel = CreateObject("Excel.Application")
次にCATIA VBAでExcelを操作できるようにExcelを定義していきます。
参照設定を行っていないとエラーが起こるため「CATIAマクロでExcelを操作する方法」をみながら事前に設定を行う必要があるので注意してください。
これによりCATIA VBAでExcel VBAを使用することが可能になります。
ユーザーが選択したbook/sheet取得
'ユーザーが選択したbook取得
Dim openFile As String
openFile = appExcel.GetOpenFilename(FileFilter:="Excelファイル,*.xlsx")
If openFile <> "False" Then
Dim wb As Workbook
Set wb = Workbooks.Open(openFile)
Else
MsgBox "キャンセルしました。"
Exit Sub
End If
'sheet定義
Dim ws As Worksheet
Set ws = wb.Sheets(1)
次に値を取得するためのExcelブックとそのシートを取得します。
先ほど定義したExcelオブジェクトの「GetOpenFilenameメソッド」を使って、ユーザーに任意のExcelファイルを選択させます。
選択されたExcelファイルのブック、シートを定義します。
記述欄に書き出し
'セルA1の値を取得
Dim desc As String
desc = ws.Cells(1, 1).Value
'プロダクトの記述(インスタンス)に書き込み
pro.DescriptionInst = desc
'Bookを閉じる
wb.Close False
最後にProduct(pro)の記述欄に先ほど取得したシートの「A1セル」の値を書き出します。
A1セルの値は取得したシート(ws)を使って「ws.Cells(1, 1).Value」と書けばOKです。
プロダクトの記述欄(インスタンス)の値は「DescriptionInstプロパティ」で表されます。
つまり「pro.DescriptionInst = desc」と書けば、取得したExcelの値を書き出すことができます。
まとめ
今回はExcelの値を取得しProduct(インスタンス)の記述欄に書き出すマクロについての内容でした。
今回のマクロで重要なのは「Excelの値を取得する方法」「Productのインスタンスの記述欄の値を変更する方法」の2つです。これさえ理解できれば複数の値(文字列)を複数のProductの記述欄に書き出すことも可能になります。








