【入門編】【初心者向け】図面作成時の単位系(ミリメートル/インチ)を強制適用する初期設定VBAマクロ – SolidWorks VBA解析バイブル

スポンサーリンク
スポンサーリンク

単位の迷宮を脱出せよ。SolidWorks VBAで図面単位を「ミリメートル」に強制固定する極意

「よし、新しい図面を作成して、自動でビューを配置するマクロを作るぞ!」

そう意気込んでコードを書き始めたあなた。しかし、いざ実行してみると、寸法が「インチ」で表示されたり、スケールが意図しない数値になったりして、頭を抱えたことはありませんか?

実は、SolidWorks VBAの世界において、「単位系(Unit System)」の制御は、初心者が見落としがちな、しかし最も重要な「設計の土台」なのです。

今回は、マクロの記録(レコーディング)という「表面的な操作の記録」から一歩踏み出し、オブジェクトの構造を理解することで、図面作成時の単位系を確実にミリメートル(MMGS)へ強制設定する、堅牢なコードの書き方を伝授します。

ここをクリアすれば、あなたの自動化プログラムは、プロが使う「道具」へと進化します。

1. なぜ「マクロの記録」では単位設定がうまくいかないのか?

多くの初心者は、SolidWorksのメニューから「単位」を変更し、その操作を「マクロの記録」で録画します。しかし、記録されたコードを見てみてください。おそらく、あなたが期待する「単位系をミリメートルにする」という明確な命令ではなく、「特定のボタンをクリックした」という断片的な動作が並んでいるはずです。

これでは、作成する図面ファイルのコンテキスト(文脈)が変わった瞬間に、マクロは沈黙します。

アーキテクトの視点:オブジェクトモデルを理解する

SolidWorks VBAを掌握するコツは、「今、どのオブジェクトに対して命令を下しているのか」を意識することです。

単位を変更するということは、図面ファイルそのもの(`ModelDoc2`)が持つ、設定プロパティ(`Document Properties`)を書き換える行為です。ボタンを押すのではなく、「ドキュメントの属性を、ミリメートルという状態へ遷移させる」。この思考の切り替えが、自動化エンジニアへの第一歩です。

2. 実践:単位系をミリメートルに強制する黄金のスクリプト

それでは、実際に使えるコードを見ていきましょう。単に動くだけでなく、エラーを防ぎ、読みやすく設計した「プロ仕様」の構成です。

Option Explicit

'' <summary>
''' アクティブな図面ドキュメントの単位系をミリメートル(MMGS)に強制設定するマクロ
''' </summary>
Sub Main()
    ' --- 1. 変数の宣言 (メモリを効率的に使うための作法) ---
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swExt As SldWorks.ModelDocExtension
    Dim errorCode As Long
    
    ' --- 2. SolidWorksアプリケーションへの接続 ---
    Set swApp = Application.SldWorks
    
    ' --- 3. 現在開いているドキュメントの取得 ---
    Set swModel = swApp.ActiveDoc
    
    ' --- 4. 安全装置:ドキュメントが開かれているか、図面であるかを確認 ---
    If swModel Is Nothing Then
        MsgBox "エラー: ドキュメントが開かれていません。", vbCritical
        Exit Sub
    End If
    
    If swModel.GetType <> swDocDRAWING Then
        MsgBox "エラー: このマクロは「図面ファイル」専用です。", vbExclamation
        Exit Sub
    End If
    
    ' --- 5. 単位系の設定実行 ---
    ' Extensionオブジェクトを介して、ドキュメントのユーザー設定(単位系)にアクセスします
    Set swExt = swModel.Extension
    
    ' swUnitSystem_e.swUnitSystem_MMGS は 「ミリメートル、グラム、秒」を意味する定数です
    ' これを直接指定することで、設定画面を介さず、内部パラメータを直接書き換えます
    errorCode = swExt.SetUserPreferenceIntegerValue(swUserPreferenceIntegerValue_e.swUnitSystem, swUnitSystem_e.swUnitSystem_MMGS)
    
    ' --- 6. 結果の判定とフィードバック ---
    If errorCode = 0 Then
        ' 成功時:リフレッシュして変更を反映させる
        swModel.ForceRebuild3 True
        Debug.Print "単位系をミリメートルに設定しました。"
    Else
        ' 失敗時
        MsgBox "単位系の設定に失敗しました。エラーコード: " & errorCode, vbCritical
    End If

End Sub

3. コードの深層解剖:何が起きているのか?

このコードがなぜ「強い」のか。その理由を、3つの重要な要素に分解して解説します。

① `swDocDRAWING` による型チェック(ガード句)

初心者が最も陥りやすいのが、「パーツファイルで図面用マクロを実行してエラーで止まる」というミスです。
`swModel.GetType <> swDocDRAWING` という一行を入れることで、「もし図面じゃなければ、何もしないで終了する」という安全装置を設けています。これをプロの世界では「ガード句」と呼びます。

② `swUnitSystem_e.swUnitSystem_MMGS` という「言葉」

ここが魔法の核心です。
SolidWorks APIには、膨大な「定数(Enum)」が用意されています。

  • `swUnitSystem_MMGS`: ミリメートル、グラム、秒(Metric)
  • `swUnitSystem_IPS`: インチ、ポンド、秒(Imperial)

マクロの記録では、単なる数字(例: `1`)として記録されることがありますが、コードの中に直接 `swUnitSystem_MMGS` と書くことで、「誰が読んでも、何をしているかが一目でわかる」読みやすいコードになります。

③ `ForceRebuild3` による同期

設定値を書き換えただけでは、画面上の表示が古いまま(インチのまま)に見えることがあります。`ForceRebuild3` を実行することで、SolidWorksに「設定が変わったから、画面をすべて描き直して!」と強制的に命令を出し、表示と実態を一致させています。

4. 陥りやすい罠:システム設定 vs ドキュメント設定

ここで、伝説のアーキテクトから一つ、重要なアドバイスを授けましょう。

SolidWorksには、「システムオプション(すべてのファイルに適用される設定)」と「ドキュメントプロパティ(今開いているファイルだけの設定)」の2種類があります。

今回ご紹介したコードは、「ドキュメントプロパティ」を書き換えるものです。
「マクロを実行した瞬間に、そのファイルがミリメートルになる」という挙動です。

もし、あなたが「これから作るすべての新規ファイルが最初からミリメートルであってほしい」と願うなら、それはVBAの領域ではなく、SolidWorksの「システムオプション」の設定領域です。

「マクロは、今そこにあるオブジェクトを、理想の状態へ導くためのもの」

この違いを理解しておくと、デバッグ(修正)の際に「コードが悪いのか、環境設定が悪いのか」を瞬時に判断できるようになります。

まとめ:次の一歩へ

おめでとうございます。あなたは今、単なる「操作の記録」を超えて、「オブジェクトの属性を直接制御する」という、真の自動化エンジニアの入り口に立ちました。

今回学んだ「型チェック」「定数による明示的な指定」「リフレッシュ」のテクニックは、図面作成だけでなく、パーツの厚み変更や、アセンブリの構成変更など、あらゆる自動化に応用できる普遍的な技術です。

ここをクリアすれば、SolidWorks VBAの基本はバッチリですよ。
さあ、次はビューの配置や、図枠の自動生成に挑戦してみましょう。道は続いています。

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