【入門編】【上級プロ】アセンブリ図面(Drawing)と3Dモデルの同期維持:VBAによる自動バルーン付与とBOM番号順序の完全一致保証システム – SolidWorks VBA解析バイブル

スポンサーリンク

【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が「もっと正しく教えてくれ」と求めている証拠です。一つずつ紐解けば、必ず突破できますよ!

応援しています。頑張ってくださいね。

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