はじめてのiCAD×VBA その2
はじめに
VBAでiCADを操作する方法を教えてもらったので、その備忘録の第二弾です。
前回作成した矩形を配置するマクロを、寸法をフォームで入力できるように改造していきます。
前回作ったVBAコード
処理内容
- 100×250×16の矩形を作成し
- ”0 0 0"の位置に配置する
コード
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
前提環境
- 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)
フォームで入力できるように改造
寸法を変数化
フォームで入力できるようにするために、前回は直接指定していた寸法部分を変数にします。
まずは必要な変数を宣言&変数をクリアする
Dim iCADObj As Object 'iCADオブジェクト用の変数を宣言
Dim iCADMac As String 'コマンド格納用の変数を宣言
Dim Depth As Long '奥行き格納先
Dim Width As Long '幅格納先
Dim Height As Long '高さ格納先
iCADMac = "" 'コマンド格納先の変数をクリア
Depth = 0 '寸法格納先の変数をクリア
Width = 0 '寸法格納先の変数をクリア
Height = 0 '寸法格納先の変数をクリア
続いて、直接指定していた寸法部分を先ほど宣言した変数に変更し、ついでに配置場所のZ方向を「奥行き」の値にすることでいい感じの場所に配置するようにします。
iCADMac = iCADMac & ";PLAY;BOX" & vbCr 'iCADMacに対して値を追記
iCADMac = iCADMac & ".Depth " & Depth & vbCr
iCADMac = iCADMac & ".Width " & Width & vbCr
iCADMac = iCADMac & ".Height " & Height & vbCr
iCADMac = iCADMac & "0 0 " & Depth & " ,"
さいごに、変数に寸法値を格納するコードを追加することで、寸法の変数化は完了です。
Sub iCAD_VBA()
Dim iCADObj As Object 'iCADオブジェクト
Dim iCADMac As String 'コマンド格納先
Dim Depth As Long '奥行き格納先
Dim Width As Long '幅格納先
Dim Height As Long '高さ格納先
iCADMac = "" 'コマンド格納先の変数をクリア
Depth = 0 '寸法格納先の変数をクリア
Width = 0 '寸法格納先の変数をクリア
Height = 0 '寸法格納先の変数をクリア
'ライブラリからiCADの操作を司るオブジェクトを呼び出す
'Setはオブジェクトを格納するときに使用する
Set iCADObj = CreateObject("ICAD.Application")
Depth = 100
Width = 250
Height = 16
iCADMac = iCADMac & ";PLAY;BOX" & vbCr 'iCADMacに対して値を追記
iCADMac = iCADMac & ".Depth " & Depth & vbCr
iCADMac = iCADMac & ".Width " & Width & vbCr
iCADMac = iCADMac & ".Height " & Height & vbCr
iCADMac = iCADMac & "0 0 " & Depth & " ,"
iCADObj.RunCommand iCADMac, MODE_COMMAND
'iCADObj.RunCommand=VBAからiCADへ「iCADMac」に格納されたコマンドを受け渡す
'MODE_COMMAND=受け渡したコマンドをiCADを「コマンドモード」で実行する
End Sub
フォームの設置
左側の「標準モジュール」を右クリックして「挿入(N)」からユーザーフォームを挿入します。
続いて下記のようにラベル、テキストボックス、コマンドボタンを使用して入力フォームを作成します。
続いて、左下のプロパティ欄より、フォームとテキストボックスにそれぞれ下記のようにオブジェクト名を付けます。
部品 | オブジェクト名 |
---|---|
フォーム | BaseCreateForm |
テキストボックス(奥行き) | DEPTH_X |
テキストボックス(高さ) | HIGHT_Y |
テキストボックス(幅) | WIDTH_Z |
フォームにコードを移植
続いてフォームをクリックしたときにVBAを実行するようにしていきます。
作成したフォームの実行ボタン部分をダブルクリックすると、下記のようなコードが出てくるので
Private Sub CommandButton1_Click()
End Sub
先ほどのコードを間にコピペします。
Private Sub CommandButton1_Click()
Dim iCADObj As Object 'iCADオブジェクト
Dim iCADMac As String 'コマンド格納先
Dim Depth As Long '奥行き格納先
Dim Width As Long '幅格納先
Dim Height As Long '高さ格納先
iCADMac = "" 'コマンド格納先の変数をクリア
Depth = 0 '寸法格納先の変数をクリア
Width = 0 '寸法格納先の変数をクリア
Height = 0 '寸法格納先の変数をクリア
'ライブラリからiCADの操作を司るオブジェクトを呼び出す
'Setはオブジェクトを格納するときに使用する
Set iCADObj = CreateObject("ICAD.Application")
Depth = 100
Width = 250
Height = 16
iCADMac = iCADMac & ";PLAY;BOX" & vbCr 'iCADMacに対して値を追記
iCADMac = iCADMac & ".Depth " & Depth & vbCr
iCADMac = iCADMac & ".Width " & Width & vbCr
iCADMac = iCADMac & ".Height " & Height & vbCr
iCADMac = iCADMac & "0 0 " & Depth & " ,"
iCADObj.RunCommand iCADMac, MODE_COMMAND
'iCADObj.RunCommand=VBAからiCADへ「iCADMac」に格納されたコマンドを受け渡す
'MODE_COMMAND=受け渡したコマンドをiCADを「コマンドモード」で実行する
End Sub
続いて、直接寸法を変数に格納していた部分をフォームのテキストボックスに入力された値を格納するように変更します。
Depth = Me.DEPTH_X '変数にテキストボックス(DEPTH_X)の値を挿入
Width = Me.WIDTH_Z '変数にテキストボックス(WIDTH_Z)の値を挿入
Height = Me.HIGHT_Y '変数にテキストボックス(HIGHT_Y)の値を挿入
ついでに実行ボタンを押すとテキストボックスの値を削除する処理と、実行が完了したらメッセージを表示する処理を最後に追加します。
Unload Me
'テキストボックスの値を削除する(MsgBOXを前にするとMsgBOXも消えるので、先に処理する)
MsgBox ("実行完了しました")
下記が今回の最終形になります。
Private Sub CommandButton1_Click()
Dim iCADObj As Object 'iCADオブジェクト
Dim iCADMac As String 'コマンド格納先
Dim Depth As Long '奥行き格納先
Dim Width As Long '幅格納先
Dim Height As Long '高さ格納先
iCADMac = "" 'コマンド格納先の変数をクリア
Depth = 0 '寸法格納先の変数をクリア
Width = 0 '寸法格納先の変数をクリア
Height = 0 '寸法格納先の変数をクリア
Set iCADObj = CreateObject("ICAD.Application")
'ライブラリからiCADの操作を司るオブジェクトを呼び出す
'Setはオブジェクトを格納するときに使用する
Depth = Me.DEPTH_X '変数にテキストボックス(DEPTH_X)の値を挿入
Width = Me.WIDTH_Z '変数にテキストボックス(WIDTH_Z)の値を挿入
Height = Me.HIGHT_Y '変数にテキストボックス(HIGHT_Y)の値を挿入
iCADMac = iCADMac & ";PLAY;BOX" & vbCr 'iCADMacに対して値を追記
iCADMac = iCADMac & ".Depth " & Depth & vbCr
iCADMac = iCADMac & ".Width " & Width & vbCr
iCADMac = iCADMac & ".Height " & Height & vbCr
iCADMac = iCADMac & "0 0 " & Depth & " ,"
iCADObj.RunCommand iCADMac, MODE_COMMAND
'iCADObj.RunCommand=VBAからiCADへ「iCADMac」に格納されたコマンドを受け渡す
'MODE_COMMAND=受け渡したコマンドをiCADを「コマンドモード」で実行する
Unload Me
'テキストボックスの値を削除する(MsgBOXを前にするとMsgBOXも消えるので、先に処理する)
MsgBox ("実行完了しました")
End Sub
最後に
前回作成した矩形を配置するマクロを、フォームで入力できるように改造しました。
次回は作成した矩形のパーツ化をやりたいと思います。
続き⇒
Discussion