【入門編】【カスタムプロパティ連携】CustomPropertyManagerで部品情報の一括読み書きと外部DB連携の土台作り – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorks VBAを掌握する極限の知見:CustomPropertyManagerで「情報の壁」を打ち破る

こんにちは。自動化の世界へようこそ。
「マクロの記録」ボタンを押して、生成されたコードの羅列に呆然とした経験はありませんか?

今日から皆さんは、その「記録されたコード」の奴隷から解放されます。SolidWorksという巨大なシステムの心臓部に、VBAというメスを入れて直接データを操作する。その第一歩が、今回のテーマ「CustomPropertyManagerによるメタデータの一括制御」です。

部品の材質、設計者、あるいは外部DBから取得した管理番号。これらがファイルの中に閉じ込められている限り、設計は「孤立した作業」です。ここを掌握すれば、設計業務は「データ駆動型のプロセス」へと劇的に進化します。

1. SolidWorks APIの階層構造を「地図」にする

まず、頭の中にこの地図を描いてください。SolidWorksのオブジェクトモデルは非常に整然としています。

  • SldWorks (ルートオブジェクト): SolidWorksという巨大なアプリケーションそのもの。
  • ModelDoc2 (ドキュメント): 今開いている「部品」「アセンブリ」「図面」。
  • CustomPropertyManager: 各ドキュメントに紐付く「情報の保管庫」。

「情報の読み書き」を行う際、私たちは常に `ModelDoc2` から `CustomPropertyManager` を引き出し、そこにコマンドを投げる という手順を踏みます。

2. 実践:カスタムプロパティを「読み取る・書き込む」

まずは基本の書き方です。ここで重要なのは「どの設定(Configuration)のプロパティか?」という点です。通常、ファイル全体に関わる情報は `”Default”`(設定名)を指定します。

Sub UpdateCustomProperty()
Dim swApp As Object
Dim swModel As ModelDoc2
Dim swCustPropMgr As CustomPropertyManager
Dim valOut As String
Dim res As Long

‘ 1. SolidWorksアプリケーションに接続
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

‘ ドキュメントが開いているかチェック(初学者が忘れがちな鉄則!)
If swModel Is Nothing Then
MsgBox “対象となるファイルが開かれていません。”, vbExclamation
Exit Sub
End If

‘ 2. カスタムプロパティ管理オブジェクトを取得
‘ 第2引数には設定名(通常は”Default”)を指定
Set swCustPropMgr = swModel.Extension.CustomPropertyManager(“Default”)

‘ 3. 書き込み(SetValue)
‘ 第2引数が値、第3引数が解決後の値(基本は同じでOK)
res = swCustPropMgr.Add3(“設計者”, swCustomInfoText, “伝説のエンジニア”, swCustomPropertyDeleteAndAdd)

‘ 4. 読み取り(Get)
swCustPropMgr.Get6 “設計者”, False, valOut, “”, False

Debug.Print “現在の設計者名: ” & valOut

‘ 再構築(再計算)を促す
swModel.ForceRebuild3 False
End Sub

3. 初学者が陥る「3つの落とし穴」

多くの初心者がここで挫折します。しかし、これさえ知っていればあなたはもう中級者です。

1. 「設定名」の迷宮:
`Extension.CustomPropertyManager(“Default”)` の文字列は、SolidWorksの「コンフィギュレーション」のタブにある名前と完全に一致させる必要があります。ここが間違っていると、コードはエラーも出さずに「何も起きない」という状態になります。
2. `Add3` と `Set2` の違い:
`Add3` は「新規追加または上書き」をするための万能メソッドです。慣れないうちは `Add3` を使い、第4引数に `swCustomPropertyDeleteAndAdd` を指定して、「存在すれば上書き、なければ新規作成」と記述するのが最も安全で堅牢です。
3. 再構築(Rebuild)の忘れ:
プロパティを書き換えても、図面枠やアセンブリのテーブルに即座に反映されないことがあります。`swModel.ForceRebuild3 False` を呼び出して、SolidWorksに「データを更新しろ」と明示的に命令する癖をつけましょう。

4. 外部DB連携への土台:CSVとの架け橋

外部DB(Excel台帳やSQL Server)と連携する際は、以下のようなループ構造を構築します。

‘ 擬似コード的な考え方
‘ 1. 外部台帳(Excel等)から「部品番号」と「重量」を取得
‘ 2. 該当するSolidWorksファイルを開く(swApp.OpenDoc6)
‘ 3. CustomPropertyManagerで「重量」プロパティを更新
‘ 4. 保存して閉じる(swModel.Save3)

この「開く→書き込む→閉じる」というサイクルを自動化するだけで、数百個の部品のプロパティ更新が、コーヒーを飲んでいる間に完了します。

最後に:自動化の真髄

「コードを書いて楽をする」ことは、サボりではありません。「本来注力すべき設計業務に、クリエイティブな時間を割くための投資」です。

今回紹介した `CustomPropertyManager` は、SolidWorks APIのほんの入り口に過ぎません。しかし、この「ファイルの中身をVBAで自在に操る」という感覚こそが、将来的にアセンブリの一括管理や自動図面生成へと繋がる最強の武器になります。

次は、「複数のファイルから一気に情報を吸い出し、Excelにリスト化する」という課題に挑戦してみましょう。そこには、設計の新しい景色が待っていますよ。

何か不明点があれば、いつでも聞いてください。皆さんの自動化ライフを心から応援しています。

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