Excelの値を取得しProduct(インスタンス)の記述欄に書き出す|CATIAマクロの作成方法
今回の記事はマクロ案募集でいただいた内容です。
送って頂いた内容は以下のようなマクロです。
ディスクトップにエクセルシートを保存しておきエクセルのA1の値を読み込み
その値を取得して、下記のインスタンス名の記述に代入する
CATIA VBAでExcelを取得するには事前に多少の設定をする必要があります。
「CATIAマクロでExcelを操作する方法」もあわせて参照してください。
マクロの機能
今回作成したマクロは選択したExcelの「A1」の値を取得し、インスタンスProductの記述欄に書き出すマクロです。具体的な機能は以下のとおりです。
・「マクロ実行 → Product選択 → 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 |
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 |
コード解説
アクティブドキュメント定義
1 2 3 4 5 6 7 8 |
'アクティブドキュメント定義 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定義
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
'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定義
1 2 3 |
'Excel定義 Dim appExcel As Excel.Application Set appExcel = CreateObject("Excel.Application") |
次にCATIA VBAでExcelを操作できるようにExcelを定義していきます。
参照設定を行っていないとエラーが起こるため「CATIAマクロでExcelを操作する方法」をみながら事前に設定を行う必要があるので注意してください。
これによりCATIA VBAでExcel VBAを使用することが可能になります。
ユーザーが選択したbook/sheet取得
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
'ユーザーが選択した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ファイルのブック、シートを定義します。
記述欄に書き出し
1 2 3 4 5 6 7 8 9 |
'セル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の記述欄に書き出すことも可能になります。