SolidWorks設計を「標準化」の檻へ。VBAでアセンブリの単位系を強制統一する極意
こんにちは。設計自動化の世界へようこそ。
「マクロの記録」ボタンを押して、生成されたコードの量に愕然としたことはありませんか? もしあなたが、設計ミスを減らし、チームの図面品質を一定に保つための「最初の一歩」を踏み出したいなら、この記事はあなたのためのものです。
今回は、SolidWorksアセンブリを作成した瞬間に、「単位系(MMGS/IPS)」や「精度」を強制的に初期化する最強のスターター・スクリプトを伝授します。これさえ理解すれば、あなたはもう「設定ミス」という言葉を忘れることができます。
—
1. なぜ「初期化」がエンジニアの命なのか
SolidWorksのアセンブリを開くたびに、「あれ、単位は何だ? インチ? ミリ?」と確認するのは、プロの仕事ではありません。
- 図面規格の不統一は、致命的な設計ミスを招く
- マクロによる自動化を組む際、前提条件(単位系)がバラバラだと計算式が破綻する
VBAを使って、「作成されたアセンブリは必ずこの規格に従う」というルールを強制的に埋め込む。これが、大規模な自動化システムを構築するための「最初の砦」になります。
—
2. 核心:アセンブリを初期化するVBAコード
このコードは、現在アクティブなアセンブリドキュメントに対し、単位系を「ミリメートル・グラム・秒(MMGS)」に設定し、小数点以下の精度を強制的に「小数点以下3位」に固定するものです。
Sub InitializeAssemblyStandard()
Dim swApp As Object
Dim swModel As ModelDoc2
Dim boolstatus As Boolean
‘ 1. SolidWorksアプリケーションへの接続
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
‘ 2. アセンブリが開かれているかチェック
If swModel Is Nothing Then
MsgBox “ドキュメントが開かれていません。”
Exit Sub
End If
If swModel.GetType <> swDocASSEMBLY Then
MsgBox “これはアセンブリではありません。”
Exit Sub
End If
‘ 3. 単位系の強制設定 (MMGS: 1, グラム: 1, 秒: 1)
‘ SetUserPreferenceInteger を使うのがプロの流儀です
‘ swUnitSystem_MMGS = 1 を指定します
boolstatus = swModel.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsAssemblyLengthUnit, 0, swLengthUnit_Millimeters)
‘ 4. 小数点以下の精度を3桁に固定
‘ 精度設定は部品やアセンブリのドキュメントプロパティを直接操作します
boolstatus = swModel.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsAssemblyDecimalPlaces, 0, 3)
‘ 再構築を実行して設定を反映
swModel.ForceRebuild3 False
MsgBox “アセンブリの単位系・精度を標準化しました。”
End Sub
—
3. コードの「裏側」を読み解く(ここが重要!)
初学者が「マクロの記録」で得たコードを見て混乱するのは、「なぜそのメソッドを使うのか」という根拠が不明だからです。
`SetUserPreferenceInteger` とは何か?
SolidWorksの設定画面(オプション)で行う操作を、VBAから直接パラメータを書き換えて実行する強力なコマンドです。
- 第一引数: どの設定項目を触るか(例: 単位系、精度)
- 第二引数: 設定のバリエーション(通常は0)
- 第三引数: 具体的な値(例: ミリメートル = 1)
このメソッドを使えば、GUIをポチポチ操作することなく、設計環境を「コード一つで」書き換えることができます。
`ForceRebuild3` の重要性
設定を変更しただけでは、画面上の表示や内部の計算精度が即座に切り替わらないことがあります。最後に必ず「リビルド」を入れるのが、堅牢なプログラムを書く者の嗜みです。
—
4. 陥りやすいエラーと対策
初心者が最初に出会う壁は、エラーではなく「期待通りに動かない」ことです。
- 壁その1:ドキュメントが開いていない
- コードの先頭で `If swModel Is Nothing` を行っています。これを怠ると、SolidWorksを起動した瞬間にマクロが爆発します。
- 壁その2:単位系の「意味」を間違える
- `swLengthUnit_Millimeters` のような定数は、SolidWorks APIの「ヘルプ(API Help)」で検索する癖をつけてください。暗記は不要です。検索能力こそがエンジニアの武器です。
—
最後に:ここから先へ
このスクリプトは、あなたの自動化の「土台」です。
次に目指すべきは、「新規アセンブリ作成時に、このマクロを自動で走らせる」ことでしょう。`SldWorks` オブジェクトのイベント(`FileNew`イベントなど)を監視することで、人間が何も意識しなくても、勝手に規格が守られたアセンブリが立ち上がる……そんな究極の環境も、VBAなら構築可能です。
まずは今日、このコードを動かし、自分の環境が「制御下に置かれる」快感を味わってください。
ここをクリアしたあなたなら、次はどんな自動化にも挑戦できるはずです。また次回の記事でお会いしましょう!
