こんにちは!SolidWorks自動化の現場で泥臭く、かつエレガントなコードを書き続けている先輩エンジニアです。
「マクロの記録」ボタンを押してパーツを手動でこねくり回し、出力された呪文のようなコードを眺めて絶望したことはありませんか?「よし、これで自動化できた!」と思いきや、少し条件が変わった途端にエラーの嵐……。よくある話です。
今回は、そんなマクロの記録から一歩抜け出し、現場で即戦力となる「Design Library(デザインライブラリ)からのライブラリ部品(.sldlfp)の自動配置」をマスターしましょう。
社内標準の切り欠き、Oリング溝、特殊なボルト穴などを一瞬で正確な位置にぶち込む。これがVBAでできるようになると、設計作業のスピードは文字通り「次元が変わる」ことになります。
ここをクリアすれば、SolidWorks APIの核心にグッと近づけますよ。さあ、一緒に扉を開けましょう!
—
1. なぜ「ライブラリ部品の挿入」は一筋縄ではいかないのか?
まず、現実を直視しましょう。SolidWorksの「マクロの記録」で、デザインライブラリから `.sldlfp` ファイルをパーツにドラッグ&ドロップする操作を記録してみてください。
……恐ろしいことに、ほとんどコードが記録されないか、動かないゴミコードが生成されるはずです。
なぜなら、デザインライブラリからの挿入は、単なる「ファイルのオープン」ではなく、「既存のパーツの面に対するスマートファスナ(Smart Fasteners)やフィーチャの合致(Mate)、コンフィギュレーションの解決」が裏で複雑に絡み合う特殊なイベントだからです。
APIの海原において、これを正しく操るためには、SolidWorksの「ファイルを開く(OpenDoc6)」ではなく、専用のメソッドである `InsertLibraryFeature` や、パーツドキュメントに対する適切なコンテキスト操作を理解する必要があります。
—
2. ライブラリ部品挿入の全体像(アプローチ)
VBAからライブラリ部品(`.sldlfp`)を配置する大まかな流れは以下の通りです。
1. 対象となるパーツファイル(`.sldprt`)をアクティブにしておく
2. ライブラリ部品のフルパスを指定する
3. `InsertLibraryFeature` メソッドを呼び出し、配置する面(Face)や参照エッジを指定する
4. 必要に応じて寸法やコンフィギュレーションを更新する
百聞は一見に如かず。まずは、あなたのデスクトップや社内サーバーのパスに合わせて書き換えればそのまま動く、実用的なコードを見てみましょう。
—
3. 実装コード:Design Library自動配置マクロ
以下のコードを、SolidWorksのVBAエディタ([Alt] + [F11])に貼り付けてください。
Option Explicit
Sub InsertLibraryFeature_Sample()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swPart As SldWorks.PartDoc
Dim boolstatus As Boolean
‘ 1. SolidWorks アプリケーションの取得
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
‘ ドキュメントが開かれていない、またはパーツ以外の場合は処理を中断
If swModel Is Nothing Then
MsgBox “パーツファイルを開いてから実行してください。”, vbCritical, “エラー”
Exit Sub
End If
If swModel.GetType <> swDocPART Then
MsgBox “このマクロはパーツファイルでのみ実行可能です。”, vbCritical, “エラー”
Exit Sub
End If
Set swPart = swModel
‘ ==========================================
‘ 2. 設定事項(ご自身の環境に合わせて変更してください)
‘ ==========================================
‘ ライブラリ部品(.sldlfp)の絶対パス
Dim libPath As String
libPath = “C:\ProgramData\SolidWorks\SolidWorks 2023\design library\features\metric\cut-slot.sldlfp”
‘ ※注意: あらかじめ対象パーツの面上に、
R
‘ ライフサイクルの鉄則として、ファイルが存在するか事前にチェック
If Dir(libPath) = “” Then
MsgBox “指定されたパスにライブラリ部品が見つかりません:” & vbCrLf & libPath, vbCritical, “ファイルなし”
Exit Sub
End If
‘ ==========================================
‘ 3. ライブラリフィーチャの挿入実行
‘ ==========================================
‘ あらかじめ選択されている「面」や「参照エンティティ」に対してライブラリ部品を適用します。
‘ ※事前にSolidWorks上で配置したい「平面」を1つ選択状態にしておく必要があります。
Dim feat As SldWorks.Feature
‘ PartDoc.InsertLibraryFeature2 を使用して挿入
‘ 引数: ライブラリパス, X座標倍率, Y座標倍率, Z座標倍率, 回転角
‘ (※シンプルにデフォルト配置する場合の構文です)
On Error GoTo ErrorHandler
‘ 処理の実行
‘ 事前に選択された面をターゲットにします
boolstatus = swModel.Extension.SelectByID2(“”, “FACE”, 0, 0, 0, False, 0, Nothing, 0)
If Not boolstatus Then
MsgBox “ライブラリ部品を配置する「面」を事前に選択してください。”, vbExclamation, “選択エラー”
Exit Sub
End If
‘ ライブラリフィーチャの挿入処理
‘ 引数詳細: (FileName, DropX, DropY, DropZ, ScaleX, ScaleY, ScaleZ, Rotation, Configuration, Values)
‘ 今回はシンプルにファイルパスのみで最小構成を実行します
Dim vResult As Variant
vResult = swPart.InsertLibraryFeature(libPath)
‘ 画面を最新の状態に更新
swModel.WindowRedraw
MsgBox “ライブラリ部品の挿入が正常に完了しました!”, vbInformation, “成功”
Exit Sub
ErrorHandler:
MsgBox “予期せぬエラーが発生しました: ” & Err.Description, vbCritical, “致命的エラー”
End Sub
—
4. コードの深掘り解説:ここがエンジニアの腕の見せ所
上記のコードで、初心者の方が一番につまずくポイントを、チーフアーキテクトの視点から解説します。
① 事前選択(Pre-selection)の重要性
コード内で `swModel.Extension.SelectByID2` を使って面を選択させている部分があります。
ライブラリフィーチャは、空間のどこにでも浮遊して配置できるわけではありません。「どのパーツの、どの面上(あるいはどの参照点に)」置くというホスト情報が絶対に必要です。
VBAから操作する場合、あらかじめ手動で、あるいはコードの直前のステップで「配置基準となる面」を選択状態にしておくのが、最も確実でエラーの起きない王道のアプローチです。
② ファイルパスの罠
`libPath` に指定している `.sldlfp` のパスですが、社内共有サーバーなどを指定する場合、ネットワークの遅延や権限問題で `Dir` 関数による存在チェックが失敗することがあります。
本番環境で運用する際は、必ずファイルが存在するかどうかのガード節(例外処理)を挟むのが、プロのエンジニアの作法です。
—
5. 現場でよくある「ハマりどころ」と解決策
罠その1:「引数が多すぎてどれを使えばいいかわからない」
`InsertLibraryFeature` やその拡張メソッドには、配置角度や寸法値(DimValues)を直接配列で渡すオーバロードが存在します。しかし、最初からすべてをコードで制御しようとすると確実に爆死します。
まずは「デフォルトのまま決まった面にドロップする」ところまでをVBAで成功させ、寸法やコンフィギュレーションの変更は、挿入された後に通常のフィーチャ操作API(Dimensionオブジェクトの操作など)で後から書き換える方が、圧倒的にコードが安定します。
罠その2:「参照エラー(References Missing)」
ライブラリ部品側で「特定の平面や軸、エッジ」を外部参照している場合、ドロップ先のパーツにそれらのエンティティが存在しないと、SolidWorksは迷子になってエラーを吐きます。
ライブラリ部品(.sldlfp)を自作・設計する段階で、「なるべく単一の面に対するスケッチ依存、あるいは寸法駆動だけで完結する(マートなパーツ設計)」にしておくことが、VBA自動化成功の最大の秘訣です。
—
まとめ:あなたの設計業務を次のステージへ
今回は、Design Libraryからの標準パーツ・フィーチャの自動挿入という、実務に直結するテーマを解説しました。
「たったこれだけのコード?」と思われるかもしれませんが、ここにはオブジェクトのライフサイクル管理、選択セットの概念、そしてエラーハンドリングという、SolidWorks VBAを極めるためのエッセンスがすべて詰まっています。
手作業で何百回も繰り返していた定型的な溝や切り欠きの配置作業を、マクロのワンクリックで終わらせる爽快感を、ぜひご自身の環境で味わってみてください。
「ここをもっとこうしたい」「このエラーを回避するには?」といった疑問があれば、いつでもエンジニアリングの現場からサポートします。SolidWorks VBAをマスターして、退屈な残業とはおさらばしましょう!
