SolidWorks自動化の真髄:アセンブリ構築を「儀式」から「秒速のワークフロー」へ
諸君、SolidWorksのAPIの世界へようこそ。
多くの初心者が陥る罠がある。それは「手作業の操作をそのままコードに翻訳しようとする」ことだ。UIをマクロでなぞるだけのコードは、ファイルを開くたびに不安定になり、計算負荷でSolidWorksをフリーズさせる。
業務自動化エンジニアとして断言する。「自動化とは、UIをなぞるのではなく、バックエンドのオブジェクトを制すること」だ。今回は、アセンブリの新規作成とプロパティ設定を、堅牢かつ高速に実行するための「プロダクション品質」のテンプレートを授ける。
—
1. なぜ「テンプレート」からの作成が鉄則なのか
多くの初心者は、いきなり `NewAssembly` を呼び出してドキュメントを作るが、これでは企業の標準テンプレート(単位系、レイヤー、カスタムプロパティ、図面枠)が適用されない。
実務では、「標準テンプレートを正しく指定して開く」ことが、下流工程の図面作成やPDM連携におけるバグを未然に防ぐ唯一の方法だ。
2. 堅牢なアセンブリ作成のアーキテクチャ
以下に、エラーハンドリングを網羅した「実戦投入可能なコード」を示す。これをコピペして、`TEMPLATE_PATH` を自社の環境に合わせて書き換えてほしい。
Option Explicit
‘ 伝説的なエンジニアが記す、堅牢なアセンブリ生成ルーチン
Public Sub CreateStandardAssembly()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim templatePath As String
‘ SolidWorksオブジェクトの取得(失敗時は終了)
Set swApp = Application.SldWorks
If swApp Is Nothing Then Exit Sub
‘ ★重要: テンプレートパスは必ず定数管理し、ハードコードを避けること
templatePath = “C:\ProgramData\SolidWorks\templates\Assembly.asmdot”
‘ 新規ドキュメントの生成
‘ 0: 部品, 1: アセンブリ, 2: 図面
Set swModel = swApp.NewDocument(templatePath, 0, 0, 0)
If swModel Is Nothing Then
MsgBox “テンプレートが見つかりません。パスを確認してください。”, vbCritical
Exit Sub
End If
‘ 単位系の強制設定 (ISO規格/mmGS)
‘ ユニット設定はファイルを開いた瞬間に適用するのがベストプラクティス
swModel.Extension.SetUserPreferenceInteger swUserPreferenceIntegerValue_e.swUnitsLinear, 0, swUnitsLinear_e.swMM
‘ ドキュメントプロパティの更新(必要なカスタムプロパティの書き込み)
Call SetCustomProperty(swModel, “DesignedBy”, “AutomationTeam”)
‘ 再構築(必須)
swModel.ForceRebuild3 False
MsgBox “アセンブリの初期化が完了しました。”, vbInformation
End Sub
‘ 汎用カスタムプロパティ設定関数
Private Sub SetCustomProperty(model As SldWorks.ModelDoc2, propName As String, propValue As String)
Dim swCustProp As CustomPropertyManager
Set swCustProp = model.Extension.CustomPropertyManager(“”)
swCustProp.Add2 propName, swCustomInfoType_e.swCustomInfoText, propValue
End Sub
—
3. 現場で生き残るための「3つの極意」
① エラーハンドリングは「沈黙」させてはならない
コード内で `On Error Resume Next` を多用するのは素人の所業だ。予期せぬエラーが起きたとき、なぜ止まったのかを特定できないコードは負債でしかない。`If swModel Is Nothing Then` のように、各ステップでオブジェクトが生成されたかを確認する習慣を身につけること。
② パフォーマンスの重みを知る
アセンブリ内の部品数が増えると、`SetUserPreference` や `ForceRebuild` は非常に重い処理になる。これらをループ内で呼び出すのは自殺行為だ。必要な設定は「作成直後」に一回だけ行うのが、CPU負荷を最小限に抑えるコツである。
③ データベース連携への布石
もしあなたが、将来的にExcelやSQL Serverから部品番号を読み込んでアセンブリを自動構成したいなら、今書いているこのコードを「クラスモジュール」として分離しておくべきだ。
- `AssemblyBuilder` クラス:ドキュメント生成担当
- `PropertyManager` クラス:属性管理担当
このように責任を分散させておけば、将来的に「PDMからの自動読み込み」のような高度な要件が来ても、メインコードを汚さずに拡張が可能になる。
—
最後に:自動化は「思考の質」に依存する
初心者は「動いた」ことに喜びを感じるが、エンジニアは「いかに壊れないか」を考える。
今回提供したコードは、単なるマクロの断片ではない。君たちがこれから構築する、数千行規模の自動化システムの「骨格」だ。
まずはこのコードを動かし、自分の環境で単位系が正しく設定されるかを確認してほしい。それが、君がSolidWorksのAPIを掌握するための第一歩だ。次回の講義では、このアセンブリに部品を「合致(Mate)」させながら配置する、より高度な制御方法を伝授する。
準備ができたら、コードを叩け。現場の効率は、君の指先にかかっている。
