【実務・中級編】【初心者向け】新規アセンブリの単位系(IPS/MMGS)やグリッド設定をVBAで強制統一する初期化自動化スクリプト – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorks自動化の真髄:アセンブリ初期化の「強制統治」が設計品質を左右する

設計部門の生産性を削ぐ最大の要因は、実は「手作業による環境設定」です。
「誰かが作成したアセンブリの単位系がIPS(インチ)になっていた」「図面の精度がバラバラで後工程でトラブルになった」。これらはケアレスミスではなく、設計プロセスに「環境を強制的に統一する仕組み」がないという構造的な欠陥です。

伝説的なエンジニアは、ツールを作る際、単に「動く」ことではなく、「逸脱を物理的に許さない」ことに全力を注ぎます。今回は、SolidWorks APIを使い、新規アセンブリを瞬時に“社内規格”へ矯正する極限の初期化スクリプトを伝授します。

—

なぜ「テンプレート」だけでは不十分なのか

多くの設計者は、SolidWorksの「テンプレートファイル(.asmdot)」を信じています。しかし、テンプレートは「最初の状態」を規定するだけであり、ユーザーが誤って設定を変えてしまった場合や、古いテンプレートが混在している環境では無力です。

業務自動化エンジニアが目指すべきは、「スクリプトが叩かれた瞬間に、ドキュメントの魂(設定)を強制的に書き換える」こと。これが堅牢な自動化の第一歩です。

—

堅牢な初期化スクリプト:プロダクションコード

以下のコードは、SolidWorksのAPIを利用して、アセンブリの単位系、精度、およびグリッド設定を強制的に上書きします。

Option Explicit

‘ SolidWorks API 定数
Private Const swDocASSEMBLY As Long = 2
Private Const swUnitSystem_MMGS As Long = 2 ‘ MMGS (ミリ・グラム・秒)

Sub ForceInitializeAssembly()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

‘ 1. ドキュメントが開かれているか、アセンブリかを確認
If swModel Is Nothing Then Exit Sub
If swModel.GetType <> swDocASSEMBLY Then
MsgBox “このスクリプトはアセンブリでのみ動作します。”, vbCritical
Exit Sub
End If

‘ 2. 単位系を MMGS に強制設定
‘ UserPreferenceDoubleValue を使用すると、ユーザー設定の深部へ直接干渉可能
swModel.SetUserPreferenceIntegerValue swUnitSystem_MMGS, 0

‘ 3. 長さ単位をミリメートル(1)、精度を小数点以下3位へ
‘ 精度設定は将来的な図面出力のトラブルを根絶するために必須
swModel.SetUserPreferenceIntegerValue 1, 1 ‘ swUnitsLinear: mm
swModel.SetUserPreferenceIntegerValue 2, 3 ‘ swUnitsPrecision: 3 decimal places

‘ 4. グリッド設定の強制(視覚的なバラつき防止)
swModel.SetUserPreferenceDoubleValue 3, 0.001 ‘ swGridMajorSpacing: 1mm
swModel.SetUserPreferenceIntegerValue 4, 10 ‘ swGridMinorLinesPerMajor: 10

‘ 変更を反映させるためのリビルド
swModel.ForceRebuild3 False

Debug.Print “アセンブリの初期化が完了しました。”
End Sub

—

プロフェッショナルの設計思想:3つの重要ポイント

1. 単位系と精度の「二重ロック」

ただ単位を変えるだけでは不十分です。`swUnitsPrecision`(精度)の設定を怠ると、寸法の切り上げ・切り捨てによる「わずかな誤差」が大規模アセンブリの干渉チェックで致命的なエラーを引き起こします。精度設定をスクリプトで固定するのは、エンジニアとしての最低限の倫理です。

2. ファイル連携とデータベースへの配慮

このコードをさらに発展させ、PDM(SOLIDWORKS PDM)と連携させる場合は、`swModel.SummaryInfo` を活用してカスタムプロパティ(設計者、作成日、プロジェクトコード)を自動入力するロジックを追加してください。
ファイル名とプロパティが整合していないアセンブリは、検索不能なデッドストックに成り下がります。データベースとの連携は、「保存」イベントにフックさせるのが定石です。

3. 保守性を高める「ガード節」

コード内で `If swModel Is Nothing` や `If swModel.GetType <> swDocASSEMBLY` といったガード節を設けていることに注目してください。初心者は「動けばいい」コードを書きますが、プロは「異常系で落ちない」コードを書きます。

—

結論:自動化は「設計の規律」である

このスクリプトを各自のPCに配布し、アドインとして登録、あるいはマクロボタンとして配置してください。
「単位系が合わない」「グリッドがバラバラ」という無駄な議論を、一行のコードで消滅させる。それこそが、SolidWorks VBAをマスターした者に与えられる特権です。

明日から、君たちの設計環境は「常に正しい状態」に保たれる。
次は、この初期化スクリプトをトリガーにして、アセンブリ保存時に自動的にBOM情報をCSV出力する仕組みに拡張してみるのもいいでしょう。

設計の自動化は、終わりのない旅です。常にコードを研ぎ澄ませてください。

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