【入門編】【カスタムプロパティ操作】CustomPropertyManager.Add3を使った承認者・図番・材料名のメタデータ自動付与 – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorks VBAを掌握する極限の知見:カスタムプロパティを「物理」レベルで制する

こんにちは。SolidWorks APIの深淵へようこそ。
「マクロの記録」ボタンを押して生成された、冗長で脆いコードに別れを告げる時が来ました。

設計現場において、図面枠やPDM(製品データ管理)システムと連動する「カスタムプロパティ」は、いわば製品の「戸籍」です。ここが不正確だと、どんなに素晴らしい3Dモデルも情報の海で迷子になります。

今日は、`CustomPropertyManager`を使いこなし、パーツに命(メタデータ)を吹き込むための、プロの作法を伝授します。

1. なぜ「Add3」なのか?:深淵なるAPIの世界

多くの初心者ユーザーは、古いメソッドや場当たり的な書き込みを行い、後で「プロパティが更新されない」「同じ名前が重複した」というエラーに頭を抱えます。

私たちが使うのは `Add3` メソッドです。なぜか?
それは、「既に存在する場合の挙動」をプログラミング側で制御できる唯一の選択肢だからです。

  • Add2: 既に存在するとエラーを吐くことがある。
  • Add3: 上書きモード(`swCustomInfoAddOption_ReplaceValue`)を指定することで、「あれば更新、なければ作成」という、エンジニアが最も欲する挙動を一行で実現できるのです。

2. 実践コード:プロフェッショナル・メタデータ・インジェクター

以下のコードは、パーツファイルに対して「承認者」「図番」「材料名」を確実に叩き込むための標準テンプレートです。

Option Explicit

Sub AddCustomProperties()
‘ SolidWorksアプリケーションの接続
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swCustPropMgr As SldWorks.CustomPropertyManager

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

‘ モデルが開かれていない場合のガード節(エラー回避の基本)
If swModel Is Nothing Then
MsgBox “パーツファイルを開いてから実行してください。”, vbCritical
Exit Sub
End If

‘ コンフィギュレーション指定(今回は「ユーザー定義」プロパティを対象)
‘ ※””は特定のコンフィギュレーションに依存しないプロパティを指します
Set swCustPropMgr = swModel.Extension.CustomPropertyManager(“”)

‘ プロパティの書き込み実行
‘ 第1引数: 名前, 第2引数: 型(定数), 第3引数: 値, 第4引数: オプション
‘ swCustomInfoAddOption_ReplaceValue = 1 (既存なら上書き)

Call SetProp(swCustPropMgr, “承認者”, “佐藤 賢治”)
Call SetProp(swCustPropMgr, “図番”, “PRT-2023-001”)
Call SetProp(swCustPropMgr, “材料名”, “SS400”)

‘ 再構築(重要:プロパティ反映を確実にするため)
swModel.ForceRebuild3 False

MsgBox “プロパティの更新が完了しました。”, vbInformation
End Sub

‘ 冗長な記述を避けるためのラッパー関数(保守性の秘訣)
Private Sub SetProp(mgr As CustomPropertyManager, name As String, value As String)
Dim ret As Long
ret = mgr.Add3(name, swCustomInfoText, value, swCustomInfoAddOption_ReplaceValue)

‘ 戻り値がエラーならログを出すなどの拡張が可能
If ret = 0 Then Debug.Print “Error: ” & name & ” の書き込みに失敗しました。”
End Sub

3. ここをクリアすれば一人前!陥りやすい罠と解決策

① 「コンフィギュレーション」の罠

`CustomPropertyManager(“”)` の引数に注目してください。ここは「どのコンフィギュレーションに対して書くか」を指定します。空文字 `””` にすると「ユーザー定義(ファイル全体)」に書き込まれます。特定のコンフィギュレーションにしか反映されない場合は、ここをその名前(例: `”Default”`)に変更する必要があります。

② モデルの再構築(Rebuild)のタイミング

APIで値を書き込んだ後、SolidWorksの画面上でプロパティが更新されていないように見えることがあります。これはメモリ上のデータと表示の同期が遅れているだけです。最後に `ForceRebuild3` を呼ぶことで、PDMや図面枠へ確実に情報を同期させることができます。

③ 「材料名」の特殊性

「材料名」は、SolidWorksの材料データベースと連動している場合、単なるテキストとして書き込むとマテリアル設定が競合することがあります。もし材料名が反映されない場合は、`swModel.MaterialPropertyName` を使うのが正攻法です。今回の `Add3` はあくまで「メタデータとしての材料名」を管理する場合に有効です。

最後に:エンジニアとしての一歩先へ

皆さんが今、マクロの記録という「手作業の記録」から脱却し、APIという「論理の記述」へ足を踏み入れたことを祝福します。

コードは単に動けばいいというものではありません。「誰が読んでも意図が明確で、後から修正が容易なこと」。それが、私たちが目指すエンジニアリングの姿です。

次は、このコードを「フォルダ内の全パーツに対して一括実行する」ループ処理に挑戦してみてください。それができれば、あなたはもう自動化の入り口に立っています。

何か詰まったら、いつでも戻ってきてください。設計という戦場を、コードの力でより美しく変えていきましょう。

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