こんにちは!SolidWorksの自動化の世界へようこそ。
日々、複雑な3Dモデルや膨大な数のコンフィギュレーション(部品のバリエーション)に囲まれて、「どのバージョンでどう仕様変更したんだっけ…?」と頭を抱えた経験はありませんか?
マクロの記録ボタンを押すだけの自動化から一歩抜け出し、現場の設計ミスを根絶したいあなたへ。今回は、「Configuration.Comment(コンフィギュレーションコメント)」をVBAから自在に操り、設計メモや改訂履歴を完全同期させる極上のテクニックを伝授します。
ここをクリアすれば、あなたのSolidWorks VBAスキルは間違いなく一段上のステージに到達します。さあ、一緒に本質を学んでいきましょう!
—
1. なぜ「コンフィギュレーションコメント」の自動化が必要なのか?
SolidWorksでは、1つのパーツファイルの中に複数のサイズや形状(例: L寸法違い、穴数違いなど)を「コンフィギュレーション」として同居させることができますよね。
非常に便利な機能ですが、実務でこんな課題に直面したことはありませんか?
- 「A寸法を変えたのは誰だっけ? 理由がどこにも残っていない」
- 「図面枠やPDMに改訂履歴を書く手前、3Dモデル側にも設計意図を残したいが、手入力だと忘れる」
SolidWorksの各コンフィギュレーションには、実は個別に「コメント(Comment)」を持たせるプロが愛用する隠しポケットがあります。これをVBAから自動書き込み・同期制御できれば、「設計者の記憶に頼らない、完全な履歴管理体制」をノーコストで構築できるのです。
—
2. SolidWorks APIの心臓部:オブジェクトの階層構造を理解する
VBAでコンフィギュレーションのコメントを操作するには、SolidWorksのAPIが持つ「オブジェクトの親子関係」を正しく理解する必要があります。
ざっくり言うと、以下の階段を降りていくイメージです。
1. SldWorks.Application (SolidWorks本体)
- $\downarrow$
2. SldWorks.ModelDoc2 (現在開いているアクティブなドキュメント)
- $\downarrow$
3. SldWorks.Configuration (今注目している特定のコンフィギュレーション)
- $\downarrow$
4. .Comment (そのコンフィギュレーションに紐づくコメント文字列)
非常にシンプルですね。それでは、実際にこの階段をコードでどう降りるのか、実用的なマクロを通して見ていきましょう。
—
3. 【実践コード】改訂履歴を自動書き込みするプロのVBA
以下のコードは、現在アクティブなパーツファイルの「現在アクティブなコンフィギュレーション」に対し、日付、担当者、そして設計変更の理由を自動でフォーマットしてコメント欄に書き込むマクロです。
そのままコピー&ペーストして、VBAエディタ(Alt + F11)に貼り付けて実行してみてください。
Sub UpdateConfigurationComment_Practical()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swConfig As SldWorks.Configuration
Dim currentComment As String
Dim newLog As String
Dim todayStr As String
Dim author As String
Dim changeReason As String
‘ 1. SolidWorks アプリケーションの取得
Set swApp = Application.SldWorks
If swApp Is Nothing Then
MsgBox “SolidWorksが起動していません。”, vbCritical
Exit Sub
End If
‘ 2. アクティブなドキュメント(パーツ)の取得
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then
MsgBox “アクティブなドキュメントがありません。パーツを開いてください。”, vbExclamation
Exit Sub
End If
‘ パーツファイル以外(アセンブリや図面)を弾く安全装置
If swModel.GetType <> swDocPART Then
MsgBox “このマクロは「パーツファイル」でのみ実行可能です。”, vbExclamation
Exit Sub
End If
‘ 3. 現在アクティブなコンフィギュレーションの取得
Set swConfig = swModel.GetActiveConfiguration
If swConfig Is Nothing Then
MsgBox “コンフィギュレーションを取得できませんでした。”, vbCritical
Exit Sub
End If
‘ 4. 書き込む内容の作成(実務を想定したインプットボックス)
author = “設計 太郎” ‘ 実際には環境変数やログインユーザーから取得してもOK
todayStr = Format(Date, “YYYY/MM/DD”)
changeReason = InputBox(“【” & swConfig.Name & “】” & vbCrLf & _
“今回の設計変更理由・改訂メモを入力してください:”, “改訂履歴の自動記録”)
If Trim(changeReason) = “” Then
MsgBox “処理がキャンセルされました。”, vbInformation
Exit Sub
End If
‘ 追記する新しいログのフォーマット
newLog = “[” & todayStr & ” ” & author & “] ” & changeReason
‘ 5. 既存のコメントを取得し、改行を挟んで新しい履歴を追加(時系列の蓄積)
currentComment = swConfig.Comment
If currentComment <> “” Then
‘ すでにコメントがある場合は、古いものの下に新しいものを追記
swConfig.Comment = currentComment & vbCrLf & newLog
Else
‘ 初めてのコメント書き込み
swConfig.Comment = newLog
End If
‘ 6. 変更をモデルに確実に反映させるための強制リビルド&保存フラグ
swModel.SetSaveFlag
‘ 完了メッセージ
MsgBox “コンフィギュレーション「” & swConfig.Name & “」のコメントを更新しました!”, vbInformation, “同期制御完了”
End Sub
—
4. コードの重要ポイントと「初心者が陥りやすい罠」
上記のコードで、特に重要なポイントと、現場でよくある失敗を防ぐための知見を解説します。
① ドキュメントタイプの安全装置(`swModel.GetType`)
実務でマクロを使う時、ユーザーがうっかりアセンブリや図面を開いた状態で実行してしまうミスは日常茶飯事です。`swModel.GetType <> swDocPART` というガードを挟むことで、「パーツ専用のマクロがアセンブリで暴発してエラーになる」という初学者がやりがみな悲劇を綺麗に防ぐことができます。
② コメントの「上書き」ではなく「追記」にする思想
`swConfig.Comment = …` と代入するだけだと、過去の履歴が消えて最新の1行だけになってしまいます。
`currentComment = swConfig.Comment` で既存の文字列を一旦変数に退避させ、`vbCrLf`(改行コード)を挟んで結合する。この「過去の資産を破壊せず、時系列で積み上げていくアプローチ」こそが、プログラミングにおけるデータ管理の鉄則です。
③ 「コンフィギュレーションのコメント」はどこで見られるの?
VBAで書き込んだコメントは、SolidWorksの画面上で以下の手順で確認できます。
1. FeatureManagerデザインツリーの「コンフィギュレーション」タブ(右側の3つの立方体が並んだタブ)を開く。
2. 対象のコンフィギュレーション名を右クリックし、「プロパティ」を選択する。
3. プロパティダイアログ内の「コメント」欄に、VBAで書き込んだテキストが綺麗に格納されています!
さらに、ここのコメントは図面のカスタムプロパティ(`$PRPSHEET{ConfigComment}` など)と連携させることもできるため、図面枠への自動出力にも応用可能です。
—
5. おわりに:ここをクリアすれば、SolidWorks VBAの基本はバッチリです!
今回は、`Configuration.Comment`を用いたコンフィギュレーション連携の自動化について解説しました。
オブジェクトの取得から、条件分岐、ユーザーからのインプット処理、そして既存データの安全な継承まで、実務で必要とされるVBAのエッセンスがこの短いコードにぎっしり詰まっています。
「ボタン一つで設計変更の歴史がモデルに刻まれる」――この感動を味わえたなら、あなたもう立派なSolidWorks自動化エンジニアです。日々の定型作業をマクロに任せて、あなたしかできないクリエイティブな設計業務に集中していきましょう!
それでは、次のステージでお会いしましょう。エンジニアライフを楽しみますように!
