【SolidWorks VBA】なぜ「とりあえず新規作成」が現場を壊すのか? 堅牢なテンプレート運用術
SolidWorks自動化の第一歩は「新規ファイルの作成」です。しかし、多くの初学者が陥る罠が、「デフォルト設定に依存した不安定なコーディング」です。
「とりあえず動けばいい」と書いたコードが、数ヶ月後にPCの環境が変わった途端にエラーを吐き、設計者の貴重な時間を奪う。そんな悲劇を未然に防ぐのが、本稿の目的です。
1. なぜ「NewDocument」だけでは不十分なのか
初心者がよく使う`SldWorks.NewDocument`メソッドは、SolidWorksのシステムオプションで指定された「デフォルトのパーツテンプレート」を参照します。
しかし、現場のPC環境は千差万別です。
- システムオプションのパスが書き換わっている
- 別部署から引き継いだPCでテンプレートの参照先が不明
- そもそもテンプレートファイルが移動・削除されている
これでは、「設計者が意図した単位系やカスタムプロパティが引き継がれない」という致命的なリスクを常に抱えることになります。業務効率化ツールの責務は「自動化すること」ではなく、「設計環境を標準化・固定化すること」です。
2. 現場で生き残るための「テンプレート指定生成」戦略
私たちが取るべきは、システム設定に頼らず、「絶対パスでテンプレートを指定する」というアプローチです。これを実現するために`SldWorks.NewDocumentEx`メソッドを使いこなします。
以下のコードは、単にファイルを開くのではなく、「例外処理」「環境チェック」「安全なドキュメントハンドリング」を組み込んだプロダクションコードのテンプレートです。
堅牢なパーツ生成サンプルコード
Option Explicit
‘ 伝説的なエンジニアの設計による、安全なパーツ生成関数
Public Function CreatePartFromTemplate(ByVal templatePath As String) As SldWorks.ModelDoc2
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim errors As Long
Dim warnings As Long
Set swApp = Application.SldWorks
‘ 1. テンプレートの存在確認(必須プロセス)
‘ ファイルパスが間違っているのに実行するのはエンジニアの怠慢です
If Dir(templatePath) = “” Then
MsgBox “指定されたテンプレートが見つかりません:” & vbCrLf & templatePath, vbCritical
Exit Function
End If
‘ 2. パーツドキュメントの生成
‘ NewDocumentExは、テンプレートのパス、用紙サイズ、幅、高さを指定します
‘ 通常のパーツ生成ではサイズ引数は0で問題ありません
Set swModel = swApp.NewDocument(templatePath, 0, 0, 0)
‘ 3. 生成失敗のチェック
If swModel Is Nothing Then
MsgBox “ドキュメントの生成に失敗しました。”, vbCritical
Exit Function
End If
Set CreatePartFromTemplate = swModel
End Function
‘ 実行用ラッパー
Public Sub RunStandardPartCreation()
‘ 社内サーバー上の固定テンプレートパスを指定する(環境変数から取得するのも推奨)
Const MY_TEMPLATE As String = “C:\CompanyData\Standards\Templates\Design_Standard.prtdot”
Dim swModel As SldWorks.ModelDoc2
Set swModel = CreatePartFromTemplate(MY_TEMPLATE)
If Not swModel Is Nothing Then
‘ ここで必要なフィーチャ生成や属性付与を行う
Debug.Print “パーツ生成完了: ” & swModel.GetTitle
End If
End Sub
3. 実務で「詰まない」ための3つの鉄則
① テンプレートパスは「ハードコーディング」を避ける
上記のコードでは説明のためにパスを直書きしていますが、実運用ではINIファイルやレジストリ、あるいは環境変数からテンプレートパスを読み取る設計にしてください。PCの入れ替えや組織改編のたびにソースコードを書き換えるのは、自動化エンジニアとして失格です。
② ファイルロックとデータベース連携の意識
パーツ生成後にファイル名を付けて保存(`SaveAs`)する際、ネットワークドライブ上の共有フォルダへの保存は、書き込み権限やファイルロックの競合リスクが伴います。必ず`SaveAs`の戻り値を確認し、エラーハンドリングを実装してください。
③ 既存ドキュメントの「汚染」を防ぐ
もしマクロが失敗した際、作成途中の「Document1」などが残ってしまうと、後続の処理で思わぬバグを生みます。マクロの終了時には、生成されたオブジェクトが適切に解放されているか、不要なウィンドウが開いていないかを常に意識してください。
まとめ:プロフェッショナルのコードとは
真のエンジニアが書くコードは、「正常系」をいかに美しく書くかではなく、「異常系」をいかに予測して封じ込めるかで決まります。
テンプレートファイルを明示的に指定することは、単なるルールの遵守ではなく、「設計品質の担保」という責任を果たすことと同義です。このコードをベースに、皆さんの現場の標準化を加速させてください。質問があればいつでもどうぞ。健闘を祈ります。
