【実務・中級編】【コンフィギュレーション連携】Configuration.Commentを用いたパーツの改訂履歴・設計メモの自動書き込みと同期制御 – SolidWorks VBA解析バイブル

スポンサーリンク

【コンフィギュレーション連携】Configuration.Commentを用いたパーツの改訂履歴・設計メモの自動書き込みと同期制御

こんにちは、チーフアーキテクトの私だ。
日々の設計現場で、こんな悪夢を見たことはないだろうか?

「A型番とB型番で微小に形状が違うが、共通の親パーツを使っている。しかし、どのコンフィギュレーションで何の目的の変更を加えたか、誰も覚えていない」
「図枠の改訂履歴欄と、3Dモデルのプロパティが完全に乖離しており、製造現場から問い合わせの嵐が起きている」

SolidWorksのコンフィギュレーション機能は強力だが、その「手軽さ」ゆえに履歴管理が属人化しやすいという致命的なジレンマを抱えている。特に設計変更の理由やメモが各担当者のローカルPCや頭の中にしか存在しない状態は、実務において爆弾を抱えているのと同義だ。

今回は、この課題を完全にハックする。
SolidWorks APIの `Configuration.Comment` プロパティを軸に据え、VBAを用いてコンフィギュレーションごとの設計変更理由や改訂履歴を自動書き込み・同期制御するプロダクションコードを伝授しよう。

1. なぜ「ファイルプロパティ」ではなく「Configuration.Comment」なのか?

多くの初心者が犯す設計ミスは、カスタムプロパティ(CustomPropertyManager)だけでコンフィギュレーション別の履歴を管理しようとすることだ。

カスタムプロパティは確かに強力だが、コンフィギュレーション特有の「コメント(Comment)」フィールドこそが、ツリー構造や外部連携(PDMやBOMシステム)において最も軽量かつダイレクトにアクセスできる隠れた名機能である。

  • UI上の配置: コンフィギュレーションを右クリック > プロパティ の「コメント」欄に直結している。
  • APIからの優位性: ドキュメント全体ではなく、特定の `Configuration` オブジェクトに直接紐づくため、コンフィギュレーション切り替え時のコンテキスト迷子が発生しない。

このコメント領域を、外部の設計変更管理ログやExcelデータベース、あるいは社内ニッチなJSON/CSVから自動同期させる仕組みを作ることが、真の「属人化排除」への近道だ。

2. 実務で耐えうる堅牢なアーキテクチャ設計

現場でコピペしただけの脆弱なマクロは、エラーハンドリングの欠如によってSolidWorksごとクラッシュする。プロの現場で求められるコードには、以下の3原則が必須だ。

1. アクティブコンフィギュレーションの安全な取得と復元: 操作対象のコンフィギュレーションを一時的に変更する場合、処理が終わったら必ず元の状態に戻す(トランザクション的思考)。
2. 厳格な型定義とAPI戻り値の検証: `SldWorks.Application` から `ModelDoc2`、そして `Configuration` へのキャストとNULLチェックを怠らない。
3. 日本語(マルチバイト文字)のエンコーディングと改行コードの制御: コメント欄に長文の履歴を入れる場合、改行や特殊文字がバグの原因になるため、フォーマットを関数化してカプセル化する。

3. プロダクションコード:改訂履歴自動同期マクロ

以下のコードは、外部の設計変更データベース(今回はシミュレーションとしてVBA内の配列や別シートを想定)からデータを読み込み、アクティブなパーツの全コンフィギュレーションに対して個別に履歴コメントを流し込む実用スクリプトだ。

Option Explicit

‘ =========================================================================
‘ ódulo名:
‘ Module_ConfigHistorySync
‘ 概要:
‘ パーツファイルの全コンフィギュレーションに対し、
‘ 設計変更履歴・コメントを自動書き込みし同期制御するモジュール
‘ =========================================================================

Sub Main_SyncConfigurationComments()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2

‘ 1. アプリケーションの取得
Set swApp = Application.SldWorks
If swApp Is Nothing Then
MsgBox “SolidWorksが起動していません。”, vbCritical
Exit Sub
End If

‘ アクティブドキュメントの取得
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then
MsgBox “アクティブなドキュメントが存在しません。”, vbExclamation
Exit Sub
End If

‘ パーツファイルかどうかのバリデーション (DocumentType: swDocPART = 1)
If swModel.GetType <> swDocPART Then
MsgBox “このマクロはパーツファイル(.sldprt)でのみ実行可能です。”, vbCritical
Exit Sub
End If

‘ 2. 処理の高速化と画面描画のロック
swModel.Extension.EnableAnimations = False

On Error GoTo ErrorHandler

‘ 3. コメント同期メイン処理の実行
Call UpdateAllConfigurationsComments(swModel)

‘ 4. クリーンアップ
swModel.Extension.EnableAnimations = True
swModel.ForceRebuild3 False

MsgBox “すべてのコンフィギュレーションの改訂履歴・コメントが正常に同期されました。”, vbInformation, “同期完了”
Exit Sub

ErrorHandler:
swModel.Extension.EnableAnimations = True
MsgBox “予期せぬエラーが発生しました: ” & Err.Description, vbCritical, “致命的エラー”
End Sub

‘ ————————————————————————-
‘ サブプロシージャ: 全コンフィギュレーションの走査とコメント書き込み
‘ ————————————————————————-
Private Sub UpdateAllConfigurationsComments(ByVal swModel As SldWorks.ModelDoc2)
Dim vConfigNames As Variant
Dim i As Long
Dim configName As String
Dim swConfig As SldWorks.Configuration
Dim currentConfigName As String

‘ 現在のアクティブコンフィギュレーション名を退避
currentConfigName = swModel.ConfigurationManager.ActiveConfiguration.Name

‘ モデル内の全コンフィギュレーション名を取得
vConfigNames = swModel.GetConfigurationNames

If IsEmpty(vConfigNames) Then Exit Sub

‘ 各コンフィギュレーションをループ処理
For i = LBound(vConfigNames) To UBound(vConfigNames)
configName = vConfigNames(i)

‘ コンフィギュレーションオブジェクトの取得
Set swConfig = swModel.GetConfigurationByName(configName)

If Not swConfig Is Nothing Then
‘ 【重要】ここでコンフィギュレーションごとのカスタム履歴テキストを生成する
‘ 実務ではここでExcelのセルや外部DBからデータを引き当てます
Dim generatedComment As String
generatedComment = GenerateHistoryText(configName)

‘ Configuration.Commentプロパティに書き込み
swConfig.Comment = generatedComment

Debug.Print “Updated Config: ” & configName & ” -> Comment: ” & generatedComment
End If
Next i

‘ アクティブコンフィギュレーションを元の状態に戻す
Dim status As Boolean
status = swModel.ShowConfiguration2(currentConfigName)
End Sub

‘ ————————————————————————-
‘ 関数: コンフィギュレーションごとの履歴テキスト生成ロジック
‘ ————————————————————————-
Private Function GenerateHistoryText(ByVal configName As String) As String
Dim historyText As String
Dim timestamp As String

timestamp = Format(Now, “YYYY/MM/DD HH:NN”)

‘ コンフィギュレーション名に応じた分岐ロジック(実務ではデータベースやExcelから動的取得)
Select Case UCase(configName)
Case “DEFAULT”, “標準”
historyText = “【初期リリース】 ” & timestamp & vbCrLf & _
“・ベース形状の確立。干渉チェック完了済み。”

Case “L-SIZE”, “LARGE”
historyText = “【改訂 Rev.1.1】 ” & timestamp & vbCrLf & _
“・強度計算に基づき肉厚を2.0mmから3.5mmへ変更。” & vbCrLf & _
“・担当: 開発部 佐藤”

Case “S-SIZE”, “SMALL”
historyText = “【改訂 Rev.1.0】 ” & timestamp & vbCrLf & _
“・軽量化要求に伴うポケット加工の追加。” & vbCrLf & _
“・担当: 開発部 鈴木”

Case Else
historyText = “【自動生成メモ】 ” & timestamp & vbCrLf & _
“・特記事項なし。標準仕様に準拠。”
End Select

GenerateHistoryText = historyText
End Function

4. チーフアーキテクトからの実務アドバイス:運用上の注意点

この仕組みを導入するにあたり、現場のエンジニアによくある質問と注意点を先回りして共有しておこう。

  • Q: アセンブリ(親アセンブリ)側からパーツのコンフィギュレーションコメントは読めるのか?
  • A: 読める。アセンブリの部品表(BOM)や、カスタムプロパティを介したドキュメント連携において、APIやマクロから各部品のコンフィギュレーション情報を参照する際、この `Comment` プロパティを抽出することで、図面にコメントを自動吹き出しとして注記させる高度な自動化も可能になる。
  • ファイル保存のトリガーについて
  • 上記のスクリプトは手動実行だが、`SldWorks_PartDocEvents` などのイベントハンドラ(あるいはPDMのワークフローフック)と組み合わせることで、「ファイル保存時に自動的に最新のタイムスタンプと改訂履歴コメントを強制同期させる」という黒魔術的な実装も可能だ。しかし、まずは手動マクロやリボンボタンへの登録からスモールスタートすることを強く推奨する。

総括

属人化の最大の原因は、「手順が頭の中にあり、システムに記録されないこと」だ。
今回紹介した `Configuration.Comment` を用いた同期制御は、コード自体はシンプルでありながら、設計データの信頼性を劇的に底上げする。

あなたのチームのSolidWorks環境を、属人化したオワコン状態から、ロジカルでセキュアな自動化の要塞へとアップデートしてほしい。健闘を祈る。

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