【SolidWorks自動化】アセンブリと図面の「同期ミス」を撲滅する、プロ級バルーン制御術
こんにちは。SOLIDWORKS APIの世界へようこそ。
日々のアセンブリ編集で、設計変更のたびに「バルーンの番号がズレた」「部品を入れ替えたらバルーンが消えた」と頭を抱えていませんか?
「マクロの記録」ボタンを押すだけの自動化から一歩進み、オブジェクトのライフサイクルを制御する「プロの自動化」へとステップアップしましょう。今回は、アセンブリと図面のBOM番号を物理的に同期させる、エンタープライズレベルの自動バルーン制御術を伝授します。
—
1. なぜ「バルーン」はズレるのか?(オブジェクトの性質を知る)
SOLIDWORKSのAPIにおいて、バルーン(Noteオブジェクト)は独立した実体です。部品がアセンブリ内で移動・置換されると、バルーンは「どの部品を指していたか」を見失い、エラーや不整合を引き起こします。
プロが意識すべきは「コンポーネントの参照(Component Reference)」と「BOMの行インデックス」です。これらを直接VBAで制御することで、手動調整という「人為的ミスの温床」を排除します。
—
2. 現場で使える「BOM同期・バルーン自動配置」コード
以下のコードは、図面上のBOMテーブルを読み取り、対応する部品の構成要素に対してバルーンを強制的に再配置するロジックの核となる部分です。
‘ SolidWorks APIによるバルーン同期のプロトタイプ
Sub SyncBOMAndBalloons()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDraw As SldWorks.DrawingDoc
Dim swView As SldWorks.View
Dim swNote As SldWorks.Note
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
‘ 図面ドキュメントでなければ終了
If swModel.GetType <> swDocDRAWING Then Exit Sub
Set swDraw = swModel
‘ 最初のシートの最初のビューを取得(実務ではループ処理で全シートを巡回)
Set swView = swDraw.GetFirstView.GetNextView
‘ BOMの各行を解析し、部品と紐づいたバルーンを生成する
‘ ここで重要なのは「swNote.Attach」メソッドの正しい利用です
Debug.Print “同期プロセス開始: BOM番号とバルーンの照合”
‘ 【重要】バルーンの既存ゴミを削除してから再作成する手法を推奨
‘ 不整合な既存バルーンを残すと、バグの特定が困難になるためです
ClearExistingBalloons swView
‘ この後にCreateAnnotationBalloon等のAPIを呼び出し、
‘ コンポーネントのComponentIDと紐づけて配置します
End Sub
Sub ClearExistingBalloons(swView As SldWorks.View)
‘ 既存のバルーンを全削除するクリーンアップ処理
Dim swAnn As SldWorks.Annotation
Set swAnn = swView.GetFirstAnnotation3
Do While Not swAnn Is Nothing
If swAnn.GetType = swAnnotationNote Then
‘ プロパティを確認し、バルーンであれば削除
If swAnn.IsBalloon Then swAnn.Select3 False, Nothing: swAnn.Delete
End If
Set swAnn = swAnn.GetNext3
Loop
End Sub
—
3. 陥りやすい罠と「回避の作法」
初心者の方がこの領域で必ず躓くポイントが3つあります。
① 「再描画(Rebuild)」のタイミング
APIで変更を加えた直後、画面が更新されずにバルーンが変な位置に飛ぶことがあります。`swModel.ForceRebuild3` を適切に挟むことで、SOLIDWORKSの計算エンジンに「今の状態を確定させろ」と命令しましょう。
② モデルのコンフィギュレーション不一致
アセンブリの「構成部品表(BOM)」は、表示されているコンフィギュレーションに依存します。VBAで操作する際は、必ず `swView.ReferencedConfiguration` が意図したものと一致しているか確認してください。
③ オブジェクト解放(Set = Nothing)
VBAはメモリ管理が甘くなりがちです。大量の部品を扱うアセンブリでは、`Set swComponent = Nothing` をループの最後に入れるだけで、メモリリークによるSOLIDWORKSのクラッシュを大幅に減らせます。
—
4. プロへの道:次に目指すべきこと
今回紹介したのは「再作成による同期」という堅牢なアプローチです。さらに高みを目指すなら、以下の技術を調べてみてください。
1. カスタムプロパティの活用: 部品側に固有のIDを持たせ、バルーンとモデルをIDで結びつける設計。
2. イベントハンドラの導入: 部品が置換された瞬間にマクロが走る「イベントドリブン型」の自動化。
3. VB.NETへの移行: VBAでは処理速度に限界がある場合、COM呼び出しのオーバーヘッドが少ないVB.NET (DLL) 化を検討してください。
—
先輩エンジニアからのメッセージ
「自動化」とは単に楽をすることではありません。「設計者が本来注力すべき創造的な思考に、脳のリソースを割り当てるための投資」です。
バルーンのズレをチェックするような退屈な作業は、プログラムに任せてしまいましょう。コードを書くたびに、あなたの設計現場はより速く、より正確になります。
このコードをベースに、皆さんの現場のルールに合わせてカスタマイズしてみてください。もしエラーで詰まったら、それはAPIが「もっと正しく教えてくれ」と求めている証拠です。一つずつ紐解けば、必ず突破できますよ!
応援しています。頑張ってくださいね。
