【実務・中級編】【エラーハンドリング】ModelDocExtension.GetEvaluationErrorsを用いたリビルドエラー・警告コードの高度な詳細解析 – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorks APIの深淵:`GetEvaluationErrors`で実現する「沈黙なきリビルド」の設計論

多くの開発者が、SolidWorksのマクロ作成において「再構築エラー」の壁に突き当たる。マクロを走らせたら「エラーが発生しました。修正しますか?」というダイアログが出て、自動化がそこで停止する。これほど非効率で、かつ開発者の誇りを傷つける事態はない。

SolidWorks APIにおけるリビルドは、単なるプロセスの実行ではない。それはメモリ上に展開されたフィーチャツリーという「動的な生物」に対して行う外科手術だ。手術後に患者(モデル)が健康かどうかを確認する術を知らないエンジニアは、現場で信頼を得ることはできない。

今日は、`ModelDocExtension.GetEvaluationErrors`を使いこなし、エラーの「正体」を数値コードで特定し、ログに刻み込む極限の技術を伝授する。

1. なぜ「エラーハンドリング」で失敗するのか

多くの初心者は、`IModelDoc2::ForceRebuild3` を呼び出した後、何も確認せずに次の処理へ進む。これは爆弾を抱えたまま走るようなものだ。

SolidWorksは内部で `swRebuildError_e` という列挙型を用いて、何が起きたかを管理している。これを拾い上げなければ、どのフィーチャの、どの拘束が破綻したのかは永遠にブラックボックスのままだ。

プロダクション環境における鉄則

  • 「成功」を前提にするな: `Rebuild`がTrueを返しても、警告(Warning)が潜んでいる可能性がある。
  • エラーコードを「資産」にせよ: 発生したエラーコードをDBやログファイルに書き出すことで、将来的に「どの部品で、どのような構成変更がエラーを誘発しやすいか」の統計データを構築できる。

2. 実装コード:エラーを屠る「堅牢なリビルド」の設計

以下は、リビルドを実行し、発生したエラーを詳細に解析して出力する汎用関数である。これをあなたのライブラリに組み込むだけで、マクロの堅牢性は劇的に向上する。

Option Explicit

‘ エラーを解析し、ログに詳細を残す堅牢なリビルド関数
Public Function SafeRebuild(ByVal swModel As SldWorks.ModelDoc2) As Boolean
Dim swExt As SldWorks.ModelDocExtension
Dim nErrors As Long
Dim nWarnings As Long
Dim vErrors As Variant
Dim i As Long

Set swExt = swModel.Extension

‘ 1. モデルの完全リビルド実行
‘ ForceRebuild3は戻り値で成否を返す
If swExt.ForceRebuild3(False) Then
SafeRebuild = True
Exit Function
End If

‘ 2. エラー詳細の取得
‘ ここでswRebuildError_eの配列が取得される
swExt.GetEvaluationErrors vErrors, nErrors, nWarnings

If nErrors > 0 Then
Debug.Print “— Rebuild Error Detected —”
For i = 0 To UBound(vErrors)
‘ vErrors(i)にはswRebuildError_eの値が格納される
‘ 実際の現場ではここをケース分岐して、原因を特定する
Debug.Print “Error Code: ” & vErrors(i)

‘ 特定のエラーコードに対するアクションをここに記述
‘ 例: 4 = swRebuildError_FeatureMissing など
Next i
End If

SafeRebuild = False
End Function

3. 現場で生き残るための「ログ設計」の極意

単にエラーコードをコンソールに出すだけでは不十分だ。実務では以下の情報をセットで記録せよ。

1. モデル名とパス: どのファイルで起きたか。
2. タイムスタンプ: どのプロセスと同期しているか。
3. 最後に操作したフィーチャ名: `IModelDoc2::FeatureByName` で最後に触ったオブジェクト名を取得し、エラーと突き合わせる。

データベース連携の視点

もしあなたが大規模な自動化システムを構築しているなら、これらのエラーコードを「JSON形式」で外部ログDB(SQLiteやSQL Server)に送信せよ。
「特定のパラメータ値(穴の径やオフセット距離)が一定を超えると、特定のフィーチャで警告が出る」といった設計意図の限界値を、マクロのログから逆解析できる。これこそが、真の業務自動化エンジニアが持つべき視点だ。

4. 最後に:エンジニアとしての矜持

VBAは、一見するとレガシーで古臭い言語に見えるかもしれない。しかし、SolidWorksのAPIという深遠なるインターフェースを介して、エンジニアリングの根幹である「形状」を制御する力は、現代のどの最新言語にも劣らない強力な武器となる。

「マクロが止まったから手動で直す」という時代は終わらせよう。
エラーを数値として捉え、制御可能な変数として取り扱う。この積み重ねが、あなたの開発するツールを「単なるおもちゃ」から「工場の生産性を支える基幹システム」へと進化させる。

さあ、次はあなたのコードで、SolidWorksに「何が起きているか」を語らせてみろ。

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