Excelの値を取得しProduct(インスタンス)の記述欄に書き出す|CATIAマクロの作成方法

今回の記事はマクロ案募集でいただいた内容です。
送って頂いた内容は以下のようなマクロです。

ディスクトップにエクセルシートを保存しておきエクセルのA1の値を読み込み
その値を取得して、下記のインスタンス名の記述に代入する

CATIA VBAでExcelを取得するには事前に多少の設定をする必要があります。
CATIAマクロでExcelを操作する方法もあわせて参照してください。

 

マクロの機能

今回作成したマクロは選択したExcelの「A1」の値を取得し、インスタンスProductの記述欄に書き出すマクロです。具体的な機能は以下のとおりです。

 icon-wrench マクロの機能まとめ ・選択したProduct(インスタンス)の記述欄に選択したExcelファイルのA1の値を書き出す
・「マクロ実行 → 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の記述欄に書き出すことも可能になります。
 

サンプルマクロ集に戻る
目次へ戻る

 

 CATIAマクロを本気で勉強するなら

2024年8月26日CATIA,CATIAマクロ