SolidWorks VBAを掌握せよ:Excelデータから「一撃」でパーツを自動生成する極意
こんにちは。現場で泥臭い自動化を積み重ね、SolidWorks APIの深淵を覗いてきたエンジニアです。
「マクロの記録」ボタンを押して生成されるコードは、いわば「初心者のための練習帳」。実務で使えるコードは、「オブジェクトのライフサイクルを制御し、エラーを握りつぶさない」という気概から生まれます。
今回は、Excelの表データから寸法と材質を読み取り、SolidWorksのパーツを一瞬で組み上げるツールを題材に、VBAの真髄を解説します。
—
1. なぜ「マクロの記録」だけでは足りないのか?
「マクロの記録」は、SolidWorksの操作をなぞるだけです。しかし、実際の業務では「もし板厚が0ならどうするか?」「指定した材質がライブラリになかったら?」といった「例外処理」が重要になります。
今回目指すのは、「設計意図をコードに落とし込む」こと。まずは、SOLIDWORKS APIの基本オブジェクトの相関図を頭に入れてください。
- SldWorks: アプリケーションそのもの。
- ModelDoc2: 開いているファイル(パーツ・アセンブリ)。
- FeatureManager: フィーチャツリーを操作する司令塔。
この階層を意識するだけで、コードの安定性は格段に上がります。
—
2. 実践:Excelから寸法を流し込みパーツを生成するコード
以下のコードは、アクティブなExcelシートの「A2セルに幅、B2セルに長さ、C2セルに板厚、D2セルに材質」が入力されている前提のスクリプトです。
Option Explicit
‘ 参照設定で「SldWorks Type Library」等を追加しておくのが流儀です
Sub GeneratePartFromExcel()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeatMgr As SldWorks.FeatureManager
Dim swSketchMgr As SldWorks.SketchManager
‘ SolidWorksに接続(なければ起動)
Set swApp = CreateObject(“SldWorks.Application”)
‘ 新規パーツ作成
Set swModel = swApp.NewDocument(“C:\ProgramData\SolidWorks\…\Part.prtdot”, 0, 0, 0)
‘ Excelから値を取得
Dim width As Double, length As Double, thickness As Double
Dim material As String
width = Cells(2, 1).Value / 1000 ‘ mmをmに変換(APIの基本単位はメートル!)
length = Cells(2, 2).Value / 1000
thickness = Cells(2, 3).Value / 1000
material = Cells(2, 4).Value
‘ スケッチ描画(正面平面を選択)
swModel.Extension.SelectByID2 “正面”, “PLANE”, 0, 0, 0, False, 0, Nothing, 0
Set swSketchMgr = swModel.SketchManager
swSketchMgr.InsertSketch True
‘ 四角形を描画して寸法拘束
swSketchMgr.CreateCenterRectangle 0, 0, 0, width / 2, length / 2, 0
‘ 押し出しフィーチャ作成
swModel.FeatureManager.FeatureExtrusion2 True, False, False, 0, 0, thickness, thickness, False, False, False, False, 0, 0, False, False, False, False, True, True, True, 0, 0, False
‘ 材質の適用(実務の重要ポイント!)
swModel.SetMaterialPropertyName2 “Default”, “C:\Program Files\SolidWorks Corp\SolidWorks\lang\japanese\sldmaterials\solidworks materials.sldmat”, material
MsgBox “パーツ生成完了!”, vbInformation
End Sub
—
3. ここをクリアすれば一人前!3つの重要ポイント
① 単位系の罠
SolidWorks APIは、内部的にメートル(m)で計算します。Excelで「100mm」と入力しても、コード内でそのまま渡すと「100m」の巨大な板が出来上がります。必ず `/ 1000` を忘れないでください。これが現場で最も多いミスです。
② モデルの再構築(Rebuild)
フィーチャを追加・変更した後は、`swModel.EditRebuild3` を実行する癖をつけてください。これを怠ると、画面上の表示と内部データが乖離し、後続の寸法変更が効かなくなることがあります。
③ 材質指定の難しさ
`SetMaterialPropertyName2` を使う際、パスが正しいか、ライブラリ内にその材質が存在するかを事前にチェックするロジックを組むと、ツールとしての信頼性が跳ね上がります。エラーハンドリング(`On Error GoTo`)を活用し、「材質が見つかりません」とユーザーに教えてあげてください。
—
終わりに:自動化は「設計」である
コードを書くことは、単なる作業の代行ではありません。「どういう順序で形状を構築すれば、エラーが起きにくいモデルになるか」という設計思想をコードに刻み込む作業です。
最初は難しく感じるかもしれませんが、オブジェクトを一つずつ操作する感覚を掴めば、SolidWorksはあなたの最強の部下になります。まずはこのコードをコピーして、自分の手元のExcelで動かしてみてください。
「ここが動かない」「もっと複雑な形状を扱いたい」といった悩みがあれば、いつでも聞いてください。壁を越えた先に、素晴らしい自動化の世界が待っていますよ!
