SolidworksはAPI(VBA)を書き綴っていく日記。
#SolidWorksAPI 導入編
SolidWorksにはデフォルトで、VBAの統合開発環境が入っています。
そのため、エクセルやプログラミング環境がなくてもAPIを利用してSolidworksを操作できます。
##●IDE環境について
SolidWorksでAPIを利用するには、
ツールバー>ツール>マクロ>新規作成 からSWPファイルを作成し、プログラムを記述していきます。
[初期画面]
初期画面では、
Set swApp = Application.SldWorks
と記述しています。
こののようにIDEにあるオブジェクトを参照し、APIを利用することができますが、私は、ここを書き換えて、
Set swApp = CreateObject("Sldworks.Application")
または、
Set swApp = GetObject(,"Sldworks.Application")
としています。
SWPファイルで作成する場合は、必ずSolidWorksを立ち上げていますので、GetObjectでオブジェクト参照を行うのが適切と思います。
##●ModelDoc2(モデル情報の取得)
今回は、立ち上げているモデルをの情報を取得するプログラムを作成します。
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As ModelDoc2
Set swApp = GetObject(, "Sldworks.Application")
Set swModel = swApp.ActiveDoc
End Sub
このようにActiveDocメソッドを使用することで、開いているモデルの情報をセットすることができます。
ここでGetPathNameメソッドを使用すると、開いているモデルの保存パス名を取得することができます。
MsgBox swModel.GetPathName
###(ModelDoc2)非常に多様されるメソッド
ModelDoc2は、モデル上の情報を取得するために非常に多様される万能メソッドです。
すべての起点になると言っても過言ではありません。
例えば、Treeアイテムの情報を取得して、Suppressedメソッドで、抑制された部材なのかをチェックできます。
##●DesignTableについて
SolidWorkの肝ともいえば、MSのExcelベースで、モデルのパラメータを制御したり、コンフィギュレーションを制御できるDesignTableの機能です。
DesignTableを利用するには以下の記述で、設計テーブルのオブジェクトを取得することができます。
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As ModelDoc2
Dim swDesignTable As DesignTable
Set swApp = GetObject(, "Sldworks.Application")
Set swModel = swApp.ActiveDoc
Set swDesignTable = swModel.GetDesignTable
End Sub
このように、ModelDoc2からDesignTableを取得できます。
DesignTableは、モデルにパラメータを反映するには、DesignTableを開き、パラメータをDesignTableのエクセルで編集し、そのあと閉じる必要があります。
その記述を追加すると以下のようにになります。
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As ModelDoc2
Dim swDesignTable As DesignTable
Set swApp = GetObject(, "Sldworks.Application")
Set swModel = swApp.ActiveDoc
Set swDesignTable = swModel.GetDesignTable
’設計テーブルを開く
Call swDesignTable.EditTable2(False)
’***************************************
’ここにエクセルのセルを変更する記述を入れる
’***************************************
’設計テーブルを閉じる
Call swDesignTable.UpdateTable(swUpdateDesignTableAll, True)
End Sub
このEditTable2メソッドでは、引数で新しいウィンドウで開くかどうかを指示することができます。
今回はFalseで設定しましたので、モデルビュー内でエクセルが開かれます。
UpdateTableメソッドは、開いているDesignTableのパラメータをモデルに反映できる記述です。
第1引数では、swUpdateDesignTableAllを指定します。
(通常は、swUpdateDesignTableAll以外は使うことはないと思います。)
第2引数は、DesignTableを閉じるかどうかを設定できます。
(通常は、閉じるのは通例ですので、True以外は設定しないのが基本です。)
今回はここまで