SolidWorks VBAの極意:テンプレートを制し、設計自動化の「源流」を設計せよ
設計自動化の現場で最も多い失敗は、「何となく作ったパーツ」が後のデータ管理で破綻することだ。ファイル名と図番の不一致、空のカスタムプロパティ、材質の未設定――これらは全て、「テンプレートの継承」を自動化フローの最初期に組み込めていないことに起因する。
今日は、SolidWorks APIを使い、社内規格に準拠したパーツを「確実に、かつエレガントに」生成するための設計思想と実装コードを伝授する。
—
1. なぜ「NewDocument」ではなく「テンプレート指定」なのか
初心者は往々にして `swApp.NewDocument` を引数なしで呼び出し、システムのデフォルト設定に依存する。これは開発において「死」を意味する。PC環境が変われば単位系が変わり、参照しているテンプレートが異なればカスタムプロパティの定義も崩れるからだ。
堅牢な自動化の鉄則:
1. 絶対パスでテンプレートを指定する(ネットワークドライブ上の共有パスを推奨)
2. 生成直後にプロパティを検証・上書きする
3. オブジェクトのライフサイクルを明確に管理する
このプロセスを徹底することで、後続のPDM連携や図面生成が驚くほどスムーズになる。
—
2. 実務直結:プロダクションコード
以下のコードは、単にファイルを作るだけでなく、エラーハンドリングとプロパティの書き込みを統合した、実務耐性のある雛形だ。
Option Explicit
‘ 伝説的なエンジニアが推奨する、失敗しないパーツ生成関数
Public Sub CreateStandardPart(ByVal partNumber As String, ByVal material As String)
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swCustPropMgr As SldWorks.CustomPropertyManager
Dim templatePath As String
Set swApp = Application.SldWorks
‘ 1. テンプレートパスは環境変数や設定ファイルから取得するのがプロの流儀
templatePath = “C:\CompanyStandard\Templates\Standard_Part.prtdot”
‘ 2. ファイルの存在確認は必須。これがないツールは「地雷」である
If Dir(templatePath) = “” Then
Err.Raise vbObjectError + 1001, “CreatePart”, “テンプレートが見つかりません: ” & templatePath
End If
‘ 3. 新規作成
Set swModel = swApp.NewDocument(templatePath, 0, 0, 0)
If swModel Is Nothing Then Exit Sub
‘ 4. カスタムプロパティへの書き込み
‘ 拡張情報(ConfigurationSpecific)ではなく、まずはCustom(全設定共通)を操作する
Set swCustPropMgr = swModel.Extension.CustomPropertyManager(“”)
swCustPropMgr.Add3 “図番”, swCustomInfoText, partNumber, swCustomPropertyReplaceValue
swCustPropMgr.Add3 “材質”, swCustomInfoText, material, swCustomPropertyReplaceValue
‘ 5. 再構築(プロパティ変更を反映させるため)
swModel.ForceRebuild3 False
Debug.Print “パーツ生成完了: ” & partNumber
End Sub
—
3. アーキテクトの視点:3つの重要ポイント
① `swCustomPropertyReplaceValue` を使い倒せ
`Add3` メソッドの引数に `swCustomPropertyReplaceValue` を指定している点に注目してほしい。これを使えば、テンプレートに既に同名のプロパティが存在していてもエラーを吐かずに上書きできる。これが「保守性の高いコード」と「その場しのぎのコード」の境界線だ。
② パス管理の抽象化
コード内にハードコーディングされたパスは、将来のメンテナンスを破壊する。可能であれば、`Registry` や `INIファイル`、あるいは `環境変数` にテンプレートパスを逃がせ。これにより、社内の標準テンプレートが更新された際、VBAコードを一箇所も修正することなく対応可能になる。
③ エラーハンドリングの意識
`swModel` が `Nothing` になるケースを想定しているか? ファイルの保存権限がない場合、テンプレートが壊れている場合。これらを `On Error GoTo` でキャッチし、ユーザーに分かりやすいメッセージを出すまでがエンジニアの仕事だ。
—
終わりに:自動化の先にあるもの
このスクリプトは、単なるパーツ生成ツールではない。「設計者が手作業で設定する」というヒューマンエラーの入る余地を一つ潰すための防波堤だ。
自動化とは、ルーチンワークを減らすことではない。「ミスが起きない仕組みを、コードという形で定着させること」にある。このパーツ生成ロジックをマスターすれば、次はアセンブリの自動構成、そして図面の自動生成へとステップアップできるはずだ。
君のコードが、明日からの設計現場を少しでも「堅牢」にすることを期待している。健闘を祈る。
