【入門編】【外部データ連携】FileSystemObject(FSO)とADODBを組み合わせたSQL Server上の製品仕様マトリクスからの完全自動パーツ生成エンジン – SolidWorks VBA解析バイブル

スポンサーリンク

【SolidWorks VBA極限活用】SQL Serverからパーツを自動生成する「完全自動ビルドエンジン」の作り方

こんにちは。製造現場の自動化を極め、SolidWorksのAPIと格闘し続けてきたアーキテクトです。

「マクロの記録」で生成されるコードは、いわば「独り言」の連続です。あれをそのまま繋ぎ合わせても、実務に耐えうる頑健なシステムは作れません。今回皆さんに伝授するのは、「外部データ(SQL Server)を読み込み、SolidWorksをCADエンジンとして使ってパーツを錬成する」という、エンジニアリングの醍醐味とも言えるアーキテクチャです。

この技術をマスターすれば、仕様書を眺めながら数時間かけていたモデリング作業が、一瞬のクリックで完結するようになります。さあ、深淵なる自動化の世界へ足を踏み入れましょう。

1. 自動化の全体像:なぜ「FSO + ADODB」なのか?

私たちが目指すのは、「仕様データが入力されたら、自動的にパーツが立ち上がり、寸法が決定され、保存される」というワークフローです。ここで重要な役割を果たすのが、以下の2つのライブラリです。

  • ADODB (ActiveX Data Objects): SQL Serverという巨大な倉庫から、必要な製品仕様(寸法、材質など)を安全に引き出す「鍵」です。
  • FileSystemObject (FSO): パーツの保存先フォルダを確認したり、ログファイルを生成したりする「現場監督」です。

必要な参照設定

VBAエディタ(Alt + F11)の「ツール」→「参照設定」から以下にチェックを入れてください。

  • Microsoft ActiveX Data Objects x.x Library(ADODB用)
  • Microsoft Scripting Runtime(FSO用)
  • SOLIDWORKS 20xx Type Library(SolidWorks用)

2. SQL Server連携:仕様取得のエンジン

まずは、データベースから寸法パラメータを引き出す関数の骨子を見てみましょう。

‘ SQL Serverから仕様を取得する関数
Function GetSpecFromDB(orderID As String) As Collection
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim specs As New Collection

‘ 接続文字列(環境に合わせて変更してください)
Dim connStr As String
connStr = “Provider=SQLOLEDB;Data Source=SERVER_NAME;Initial Catalog=DB_NAME;Integrated Security=SSPI;”

conn.Open connStr
rs.Open “SELECT Length, Width, Material FROM ProductSpecs WHERE OrderID = ‘” & orderID & “‘”, conn

If Not rs.EOF Then
specs.Add rs!Length, “Length”
specs.Add rs!Width, “Width”
specs.Add rs!Material, “Material”
End If

rs.Close: conn.Close
Set GetSpecFromDB = specs
End Function

3. SolidWorksパーツ生成のアーキテクチャ

次に、取得したデータを使ってSolidWorksを操作します。ここで最も重要なのは、「フィーチャの再構築(Rebuild)」を適切に制御することです。

Sub GeneratePartFromSpecs(orderID As String)
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim specs As Collection

Set swApp = Application.SldWorks
Set specs = GetSpecFromDB(orderID)

‘ 新規パーツ作成
Set swModel = swApp.NewDocument(“Part”, 0, 0, 0)

‘ スケッチ作成と寸法付与のロジック
‘ ここでは簡略化のため、既存パラメータの書き換えを想定
Dim swModelDocExt As SldWorks.ModelDocExtension
Set swModelDocExt = swModel.Extension

‘ 寸法値の更新(パラメトリックな設計の肝)
swModel.Parameter(“D1@Sketch1”).SystemValue = specs(“Length”) / 1000 ‘ メートル単位への変換に注意
swModel.Parameter(“D2@Sketch1”).SystemValue = specs(“Width”) / 1000

‘ 再構築して保存
swModel.EditRebuild3
swModel.SaveAs2 “C:\Output\” & orderID & “.sldprt”, 0, False, False

Debug.Print “パーツ生成完了: ” & orderID
End Sub

4. 初学者が陥りやすい「3つの落とし穴」

多くのエンジニアがここで躓きます。これを知っているだけで、あなたのマクロの信頼性は格段に上がります。

1. 単位系の罠: SolidWorksの内部単位は「メートル(m)」です。ユーザーが「100mm」と入力しても、コード上では「0.1」と扱わなければなりません。
2. 再構築のタイミング: フィーチャを追加した直後、`swModel.EditRebuild3` を実行しないと、後続のプログラムが「存在しないジオメトリ」を参照してエラーになります。
3. オブジェクトの解放: `Set swApp = Nothing` を忘れがちですが、長時間の連続実行を行う場合は必ずメモリを解放してください。そうしないと、SolidWorksが裏で生き残り、PCの動作が重くなります。

最後に:自動化は「設計の質」を高めるためのもの

「自動化」は、単に作業を楽にするだけのものではありません。人間が手作業で行う「入力ミス」や「設定漏れ」というヒューマンエラーを排除し、設計者がもっとクリエイティブで重要な検討に集中するための手段です。

今回紹介したコードは、あくまで「エンジン」の最小構成です。ここから、エラーハンドリング(`On Error Resume Next`を適切に使いつつ、ログを出力する等)を組み込み、皆さんの現場に合わせて育てていってください。

もし、壁にぶつかったら、それはあなたがプロのエンジニアへと脱皮している証拠です。応援しています。また次のステップでお会いしましょう!

タイトルとURLをコピーしました