エンジニアの皆さん、こんにちは。設計現場の「面倒なルーチン」を技術の力でねじ伏せる、自動化アーキテクトの世界へようこそ。
「既存の優秀なアセンブリを流用したいのに、手動で別名保存して開くとリンク先が元のファイルに繋がったままで、修正したら元データまで壊してしまった……」
そんな冷や汗をかく経験、一度や二度ではありませんよね。「アセンブリのクローン作成」は、ファイル管理における最大の鬼門です。これを手作業でやろうとすれば、必ずどこかでヒューマンエラーが起きます。
今日は、SolidWorks APIを正しく操り、参照パスを安全に制御しながらサブアセンブリを丸ごと複製する「実務レベルの極意」を伝授します。
—
1. なぜ「名前を付けて保存」だけではダメなのか?
SolidWorksのファイルは、部品・サブアセンブリ・図面が複雑な「参照関係」という蜘蛛の巣で繋がれています。単にWindowsのエクスプローラーでファイルをコピーしても、内部の参照パスまでは書き換わりません。
これらを安全に扱うために、我々エンジニアが押さえるべきは以下の3点です。
- 参照整合性の維持: 親ファイルがどのファイルを読み込むべきか、IDレベルで管理する。
- フルパスの再定義: 複製先のフォルダに合わせ、確実に新しいパスを認識させる。
- モデルのクリーンアップ: 不要なキャッシュやコンフィギュレーションを除去し、軽量なデータを作る。
—
2. 実装の設計図:クローン作成のアーキテクチャ
今回は、`ISldWorks::CopyDocument` メソッドを使用します。これはAPIの基本ですが、ただ使うだけでは不十分です。以下のコードは、「指定したサブアセンブリを別名で複製し、参照パスをターゲットディレクトリへ強制的に紐付ける」ためのロジックです。
‘ SolidWorks VBA サンプルコード:サブアセンブリの安全な複製
Sub CloneSubAssembly()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim sourcePath As String, destPath As String
Dim nErrors As Long, nWarnings As Long
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
‘ 1. 対象ファイルのパスを定義
sourcePath = “C:\Projects\Template\SubAssy.sldasm”
destPath = “C:\Projects\NewProject\SubAssy_New.sldasm”
‘ 2. 参照を維持したままの複製
‘ swCopyDocOptions_e は、複製時の挙動を制御する重要フラグ
Dim bRet As Boolean
bRet = swApp.CopyDocument(sourcePath, destPath, “”, “”, swCopyDocOptions_e.swCopyDocOptions_None)
If bRet Then
MsgBox “複製成功。参照先が自動的に新ファイルへ再定義されました。”
Else
MsgBox “複製失敗。ファイルパスや権限を確認してください。”
End If
End Sub
—
3. 実務で「詰まない」ための3つの鉄則
コードを動かすだけなら簡単ですが、現場で生き残るためには以下の知見を心に刻んでください。
① 「絶対パス」で迷子にならない
VBAでパスを扱う際、`\`(バックスラッシュ)の扱いはプログラムの敵です。`Replace(path, “/”, “\”)` のように、常にパスの区切り文字を正規化する癖をつけてください。
② ファイルロックを回避する
SolidWorksが対象ファイルを開いたままでは、APIによる操作が失敗することがあります。自動化の前には必ず `swApp.CloseDoc` を実行し、対象ファイルをメモリから解放する「お作法」を忘れないようにしましょう。
③ エラーハンドリングは「逃げ道」を作る
`On Error Resume Next` を多用するのは素人です。
‘ 良い例:エラーを検知してログを出す
If Err.Number <> 0 Then
Debug.Print “エラー発生: ” & Err.Description
‘ ここでクリーンアップ処理を行う
End If
APIが例外を吐いた時、どこで止まったかを可視化することが、保守性の高いマクロを作る第一歩です。
—
4. さあ、次のステップへ
今回のコードはあくまで「クローン作成」の核です。ここから発展させて、「複製後に自動で構成部品の名前をプロジェクトコードに一括置換する」という機能を追加すれば、あなたの作業時間は週に数時間は削減できるはずです。
「マクロの記録」はあくまでチュートリアルです。そこから、SolidWorksが裏側でどうやってファイルを管理しているかという「モデルのライフサイクル」に目を向けてください。
もしコードが動かなかったら、まずは「ファイルパスが本当に正しいか」「読み取り専用になっていないか」を一つずつ確認しましょう。それが、伝説の自動化エンジニアへの最短ルートです。
分からないことがあれば、いつでもまた聞きに来てください。あなたの設計ライフが、より創造的で快適なものになることを願っています。
