7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SolidWorks API Part1

Posted at

SolidworksはAPI(VBA)を書き綴っていく日記。

#SolidWorksAPI 導入編

SolidWorksにはデフォルトで、VBAの統合開発環境が入っています。
そのため、エクセルやプログラミング環境がなくてもAPIを利用してSolidworksを操作できます。

##●IDE環境について
SolidWorksでAPIを利用するには、
ツールバー>ツール>マクロ>新規作成 からSWPファイルを作成し、プログラムを記述していきます。

[初期画面]

無題.png

初期画面では、
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

↓このように、モデルパスが表示されます。
無題.png

###(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で設定しましたので、モデルビュー内でエクセルが開かれます。
無題.png

UpdateTableメソッドは、開いているDesignTableのパラメータをモデルに反映できる記述です。

第1引数では、swUpdateDesignTableAllを指定します。
(通常は、swUpdateDesignTableAll以外は使うことはないと思います。)

第2引数は、DesignTableを閉じるかどうかを設定できます。
(通常は、閉じるのは通例ですので、True以外は設定しないのが基本です。)

今回はここまで:coffee:

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?