Excel上で指定した範囲をCATDrawingのテーブルとして出力するマクロ|CATIAマクロの作成方法
今回の記事は「マクロ案」よりいただいた内容です。
送って頂いた内容は以下のようなマクロです。
ワークベンチ:ドラフティング
マクロ案: excelで特定の領域をDragした一部分をCATIAのtableで生成する方法を知りたいです。
VBAではマクロ実行後の処理が終わるまでExcelの領域を指定することはできませんが、UserFormを使用すればこれが可能になります。今回はUserFormとコードが分かれるためコードの詳細は解説していません。どうしても解説が欲しい場合は「お問い合わせ」よりご連絡ください。
マクロの機能
今回作成したのはExcel上で指定した範囲をCATDrawingのテーブルとして出力するマクロです。
具体的な機能は以下のとおりです。
・指定範囲内が空白でも指定範囲と同じサイズのテーブルが出力される
・作成位置はクリックで指定可能(上画像の操作手順⑤)
・セルが結合されている部分は非対応(結合していないものとして出力)
また、今回のサンプルマクロではUserFormを使用するので、上画像のようなフォームを作成しておきましょう。このときUserForm名称は「Export_table」、ボタン名称は「CommandButton1」にしておいてください。
VBAコード
コード全体は下記の通りです。
標準モジュールとUserFormの2つのコードがあるので注意して下さい。
また、CATIA VBAでExcelの操作をするためには設定をする必要があります。
CATIAマクロでExcelを操作する方法を参考に事前に設定しておきましょう。
お問い合わせ頂いた内容の処理はできるようになっていますが、UIがかなりヒドいのでUserForm上に操作手順を書いたり、次にどんな操作をするかがわかりやすくなるような処理を追加する等をオススメします。
標準モジュールコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Option Explicit Public appExcel As Excel.Application Sub CATMain() Set appExcel = CreateObject("Excel.Application") 'テーブルに出力するExcelファイルを開く Dim fn As String fn = Application.GetOpenFilename(FileFilter:="Excelファイル,*.xlsx") If fn <> "False" Then Dim wb As Workbook Set wb = appExcel.Workbooks.Open(fn) appExcel.Visible = True Else MsgBox "キャンセルしました。" Exit Sub End If 'UserFormを開く:開いたExcelの出力するセルを選択した状態でボタンを押して実行 Export_table.Show vbModeless End Sub |
UserFormコード
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 |
Option Explicit Private Sub CommandButton1_Click() Me.Hide Dim doc As DrawingDocument: Set doc = CATIA.ActiveDocument Dim sht As DrawingSheet: Set sht = doc.Sheets.ActiveSheet Dim vw As DrawingView: Set vw = sht.Views.ActiveView 'ユーザー選択で位置の座標を取得 Dim sel 'As Selection Set sel = doc.Selection Dim msg As String msg = "点もしくは図面内の任意の地点をクリックしてください。" Dim filter filter = Array("Point2D") Dim flg As Boolean Dim coord(1) Dim res As String res = sel.IndicateOrSelectElement2D(msg, filter, False, False, False, flg, coord) If res = "Normal" Then If flg = True Then Dim selPoint 'As Point2D Set selPoint = sel.Item(1).Value selPoint.GetCoordinates coord End If Else MsgBox "キャンセルします。" Exit Sub End If Dim selArea As Range Set selArea = appExcel.Selection 'テーブル作成 Dim tbl As DrawingTable If selArea.Count = 1 Then Set tbl = vw.Tables.Add(coord(0), coord(1), 1, 1, _ selArea.RowHeight / 2, selArea.ColumnWidth * 4) Call tbl.SetCellString(1, 1, selArea.Value2) Else Set tbl = vw.Tables.Add(coord(0), coord(1), _ UBound(selArea.Value2, 1), UBound(selArea.Value2, 2), _ selArea.RowHeight / 2, selArea.ColumnWidth * 4) Dim i As Long Dim j As Long Dim ex_val As String For i = 1 To UBound(selArea.Value2, 1) For j = 1 To UBound(selArea.Value2, 2) ex_val = selArea.Value2(i, j) Call tbl.SetCellString(i, j, ex_val) Next j Next i End If appExcel.ActiveWorkbook.Close Unload Me MsgBox "テーブルに書き出しました。" End Sub |
まとめ
今回はExcel上で指定した範囲をCATDrawingのテーブルとして出力するマクロについての内容でした。
重要なのはExcel上で範囲を指定するフェーズを作るために、UserFormを使用するところです。
これによりマクロ実行後だとしても、ボタンが押されるまでCATIAやExcelを操作する時間を生み出すことができます。
今回のマクロに限らずUserFormをうまく使うことで、標準モジュールだけではできないような操作が可能になるので、いろいろ試してUserFormも使いこなせるようにするのもよいと思います。