💻

はじめてのiCAD×VBA

2025/01/26に公開

はじめに

VBAでiCADを操作する方法を教えてもらったので、その備忘録。
とりあえず矩形を配置するマクロを作成してみます。

前提環境

  • Excelで開発タブの表示
  • iCAD SXのダウンロード

参考

「C:\ICADSX\HELP」内にiCADのHelpが格納されています。

  • VB I/Fに関するHelp:ICADOLEA.chm
  • V8L3コマンドキーワード一覧:SXPROKEY.chm

また、PDFで「コマンド簡易開発ガイド」も用意されており、VBAでの開発とVBでの開発のマニュアルになっています。
(C:/ICADSX/man/development_guide.pdf)

環境準備

Excelでライブラリの読み込み

Excelの開発タブからVisualBasicを開き、メニューバーの「ツール(T)」→「参照設定(R)」→「参照(B)」を開き、「C:\ICADSX\HELP\ICADOLEA.tlb」を選択します。

VBAの作成

iCADでマクロの記録

iCAD SXを開き、アイコンメニューの「ツール」タブよりマクロの記録を行います。
行った動作は下記の通り。

  1. マクロの記録を開始(kukeiという名前で保存)
  2. 直方体を配置
    • 奥行き:100
    • 幅  :250
    • 高さ :16
    • 配置点:0 0 0
  3. マクロの記録を終了

記録したマクロは下記の通り。

kukei
/* MACREC_COMMENT_BEGIN                                                         
/* MACREC_COMMENT--------------------------------------------------------       
/* MACREC_COMMENT マクロ記録はこの位置にコメントを追加または削除します。        
/* MACREC_COMMENT--------------------------------------------------------       
/* MACREC_COMMENT--------------------------------------------------------       
/* MACREC_COMMENT_END                                                           
@SUPKER 
=0                                                                              
@SUPKER                                                                         
=1                                                                              
;PLAY                                                                           
;BOX                                                                            
;ARG                                                                            
;VER                                                                            
@IOFF                                                                           
@IOFF                                                                           
;CUR                                                                            
@SUPKER                                                                         
=0                                                                              
.DEPTH 100                                                                      
.WIDTH 250                                                                      
.HEIGHT 16                                                                      
:                                                                               
0 0 0 ,                                                                         
@SUPKER                                                                         
=1                                                                              
                                                                         

記録したマクロの中身

マクロファイルは「C:\ICADSX\USER\MACRO」に記録した名前(今回でいうと「kukei」)で保存されています。

コメント

kukei
/* MACREC_COMMENT_BEGIN                                                         
/* MACREC_COMMENT--------------------------------------------------------       
/* MACREC_COMMENT マクロ記録はこの位置にコメントを追加または削除します。        
/* MACREC_COMMENT--------------------------------------------------------       
/* MACREC_COMMENT--------------------------------------------------------       
/* MACREC_COMMENT_END  

マクロ記録時に勝手に追加されるコード
キーワードチェックとやらを有効化(0)・無効化(1)しているらしい。
無くても動くためVBA移植時は削除する。

kukei
@SUPKER 
=0                                                                              
@SUPKER                                                                         
=1  

直方体の配置に関するコマンド1
直方体を配置するコマンド
直方体を配置するならここは絶対に必要となる。

kukei
;PLAY '立体配置コマンド
;BOX '直方体を配置

直方体の配置に関するコマンド2
カーソルでの配置に関するコード
今回はカーソルで配置場所を指定せずにコマンドで配置した。

kukei
;ARG '配置する
;VER '頂点を指定して配置
@IOFF '何かをオフにするコマンド
@IOFF
;CUR 'カーソルを指す

マクロ記録時に勝手に追加されるコード
ここもいらない。

kukei
@SUPKER                                                                         
=0                                                                              

直方体の配置に関するコマンド3
配置する直方体の大きさを指定

kukei
.DEPTH 100 '奥行き
.WIDTH 250 '幅
.HEIGHT 16 '高さ

改行?区切り?っぽいの

kukei
:

直方体の配置に関するコマンド4
配置位置を指定。
左から順にX,Y,Z

kukei
0 0 0 ,

マクロ記録時に勝手に追加されるコード
これもいらない。

kukei
@SUPKER                                                                         
=1

いらないコードを省くとこうなる

kukei
;PLAY                                                                           
;BOX                                                                            
.DEPTH 100                                                                      
.WIDTH 250                                                                      
.HEIGHT 16                                                                      
:
0 0 0 ,                                                                         

記録したマクロ(aaaaa)の中身を上記の内容に変更して保存し、iCADで実行してみると無事矩形が配置されました。

ExcelVBAに必要部分を移植

まずはExcelを開いて開発タブからVisualBasicを開き、左側の「標準モジュール」を右クリックして「挿入(N)」から標準モジュールを挿入します。
ここにコードを記述していきます。

共通項目

下記はiCADを操作するVBAで絶対に必要になるものです。

はじめてのiCAD×VBA.xlsm
Sub iCAD_VBA()

Dim iCADObj As Object 'iCADオブジェクト用の変数を宣言

'ライブラリからiCADの操作を司るオブジェクトを呼び出す
'Setはオブジェクトを格納するときに使用する
Set iCADObj = CreateObject("ICAD.Application")

End Sub

記録したマクロを移植

記録したマクロをVBAで動くように移植していきます。
今回はコマンドをVBA内で作成してiCADで実行する為、まずはコマンドを実行するのに必要なコードを追加します。

はじめてのiCAD×VBA.xlsm
Sub iCAD_VBA()

Dim iCADObj As Object 'iCADオブジェクト用の変数を宣言
Dim iCADMac As String 'コマンド格納用の変数を宣言

'ライブラリからiCADの操作を司るオブジェクトを呼び出す
'Setはオブジェクトを格納するときに使用する
Set iCADObj = CreateObject("ICAD.Application")

iCADObj.RunCommand iCADMac, MODE_COMMAND
'iCADObj.RunCommand=VBAからiCADへ「iCADMac」に格納されたコマンドを受け渡す
'MODE_COMMAND=受け渡したコマンドをiCADを「コマンドモード」で実行する

End Sub

次に、先ほど必要部分のみ抽出したマクロを移植します。
「iCADMac」という変数に対してコマンドとなる文字や数字を追加していき、最終的にiCADで実行するコマンドを作成していきます。

はじめてのiCAD×VBA.xlsm
Sub iCAD_VBA()

Dim iCADObj As Object 'iCADオブジェクト用の変数を宣言
Dim iCADMac As String 'コマンド格納用の変数を宣言

'ライブラリからiCADの操作を司るオブジェクトを呼び出す
'Setはオブジェクトを格納するときに使用する
Set iCADObj = CreateObject("ICAD.Application")

iCADMac = iCADMac & ";PLAY;BOX" & vbCr 'iCADMacに対して値を追記
iCADMac = iCADMac & ".Depth " & "100" & vbCr
iCADMac = iCADMac & ".Width " & "250" & vbCr
iCADMac = iCADMac & ".Height " & "16" & vbCr
iCADMac = iCADMac & "0 0 0 ,"

iCADObj.RunCommand iCADMac, MODE_COMMAND
'iCADObj.RunCommand=VBAからiCADへ「iCADMac」に格納されたコマンドを受け渡す
'MODE_COMMAND=受け渡したコマンドをiCADを「コマンドモード」で実行する

End Sub

追加した部分の処理としては、
iCADMac = :「iCADMac」に対して
iCADMac & :「iCADMac」に格納されている文字の後ろに
";PLAY;BOX" & :「;PLAY;BOX」を追記し、
vbCr:改行する
という処理を繰り返しており、最終的に添削したマクロとほぼ同じコマンドが出来上がります。

上記のコードを実行すると下記のように無事実行することが出来ました。

最後に

今回はこの間会社で教えてもらった内容のうち、決まった寸法の矩形を配置するマクロの部分をまとめました。
まだ完璧に理解しているわけではないので、間違いがあればご指摘ください。
次回はフォームに入力した寸法で矩形を作成するようにしていきたいと思います。

続き⇒
https://zenn.dev/nakashun_mf/articles/4dbcd2888dc39c

Discussion