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

スポンサーリンク

こんにちは。SolidWorksの世界へようこそ。
マクロの記録ボタンを押して「なんとなく動いたからOK」という段階を卒業し、「なぜ動かないのか」をプログラム自身に語らせる領域へ踏み込もうとしているあなたを、私は心から歓迎します。

今日は、多くのエンジニアが挫折する「リビルドエラー」という深い霧を、APIの力で完全に晴らすための技術を伝授します。

1. なぜ「再構築エラー」でマクロは沈黙するのか?

SolidWorksで複雑なモデルを自動生成する際、寸法が矛盾したり、参照が消失したりすると、画面右上に「再構築エラー」の警告が出ますよね。人間なら目で見て原因を探せますが、API(マクロ)から見れば、それは「計算不能なブラックボックス」です。

マクロの記録で生成されたコードは、正常な状態を前提に書かれています。しかし、真のエンジニアリングは「エラーが起きた時、どう復旧させるか」という設計から始まります。

2. 核心:ModelDocExtension.GetEvaluationErrors の真価

SolidWorks APIには、フィーチャの評価エラーを詳細に取得する `GetEvaluationErrors` という強力なメソッドがあります。これを使えば、「どのフィーチャが、どんな理由で泣いているのか」を数値コードで引き出せます。

取得できるエラーコードの読み方

このメソッドは、エラーの「タイプ」を整数で返します。

  • 0: 正常
  • 1: 再構築エラー(フィーチャ自体が破綻)
  • 2: 警告(フィーチャは生成されたが、潜在的な問題あり)

3. 実践:エラーを解析し、ログを出力する職人コード

以下のコードは、単にリビルドするだけでなく、「もし失敗したら、どのフィーチャが原因か」を即座に特定するための汎用テンプレートです。

Option Explicit

‘ 伝説のエンジニアが教える「エラー検知ルーチン」
Sub SmartRebuildAndCheck()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swExt As SldWorks.ModelDocExtension
Dim errorCount As Long
Dim warningCount As Long

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

‘ 1. モデルの再構築
‘ ForceRebuildTrue: 強制的に全フィーチャを再計算
swModel.ForceRebuild3 True

‘ 2. エラー状況を解析
‘ GetEvaluationErrors を呼び出し、詳細なエラー情報を取得
Dim errorStatus As Long
errorStatus = swExt.GetEvaluationErrors(errorCount, warningCount)

‘ 3. エラーハンドリングの分岐
If errorCount > 0 Then
Debug.Print “警告:合計 ” & errorCount & ” 個の再構築エラーを検出しました。”
Call AnalyzeFeaturesWithError(swModel)
Else
Debug.Print “成功:モデルは健全です。”
End If
End Sub

‘ フィーチャツリーを巡回し、エラーの元凶を特定する
Sub AnalyzeFeaturesWithError(swModel As SldWorks.ModelDoc2)
Dim swFeat As SldWorks.Feature
Set swFeat = swModel.FirstFeature

Do While Not swFeat Is Nothing
‘ GetErrorCode を使い、各フィーチャの状態を確認
If swFeat.GetErrorCode <> 0 Then
Debug.Print “【エラー発生】フィーチャ名: ” & swFeat.Name & _
” / エラーコード: ” & swFeat.GetErrorCode
End If
Set swFeat = swFeat.GetNextFeature
Loop
End Sub

4. このコードが「プロの第一歩」である理由

このコードには、単なる自動化以上の意味が込められています。

1. イテレーション(巡回)の作法: `swModel.FirstFeature` から始まる `Do While` ループは、SolidWorksのデータ構造(ツリー構造)を正しく走査する基本です。これを理解すると、フィーチャの「抑制」や「削除」も自由自在になります。
2. 受動的ではなく、能動的なエラー検知: エラーが出てから「マクロが止まった」と嘆くのではなく、「エラーを検知してログに落とす」という仕組みを組み込むことで、開発のデバッグ時間が劇的に短縮されます。
3. コードの拡張性: `swFeat.GetErrorCode` で返される数値は、SolidWorksのヘルプ(API Help)にある `swFeatureErrorCodes_e` という列挙体と対応しています。ここをさらに深掘りすれば、「寸法が負になった」のか「面が交差した」のかまで判別可能です。

5. 先輩からのアドバイス

SolidWorks VBAの道は、最初は暗く見えるかもしれません。しかし、「なぜ?」をAPIに問い続ける姿勢さえあれば、必ず道は開けます。

まずは、上記コードをコピーして、わざとエラーが出るようなパーツを作って実行してみてください。デバッグウィンドウにエラーが出た瞬間、あなたは「SolidWorksを操っている」実感を肌で感じられるはずです。

もし分からないことがあれば、いつでも聞いてください。私たちは「自動化」という魔法を使って、もっと創造的な仕事をするためにここにいるのですから。

さあ、次の自動化へ踏み出しましょう!

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