【入門編】【エラーハンドリング】ModelDocExtension.GetEvaluationErrorsを活用した「再構築エラー(Rebuild Error)」の完全自動ログ解析 – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorks VBAの真髄:再構築エラーを制する「GetEvaluationErrors」完全攻略ガイド

こんにちは。現場で泥臭い自動化を積み重ねてきたエンジニアとして、今日は皆さんに「マクロが止まる」というストレスから解放されるための、一段上のテクニックを伝授します。

「マクロを実行したけど、真っ赤なエラーメッセージが出て止まった…」
「モデルが再構築できない…」

こんな経験、一度はありますよね。多くの人がここでマクロの記録(レコーダー)の限界を感じて挫折します。しかし、プロフェッショナルな現場では、エラーは「発生させるもの」ではなく「APIを使って解析し、先回りして叩くもの」です。

今回は、SolidWorksの「再構築エラー」をプログラムで特定し、ログに出力する方法を解説します。

1. なぜ「マクロの記録」だけでは限界があるのか

マクロの記録は、あくまで「マウス操作の再現」に過ぎません。しかし、複雑なパーツモデルでは、フィーチャの親子関係や寸法の依存関係が絡み合い、計算が破綻することがあります。

ここで重要なのが `ModelDocExtension.GetEvaluationErrors` というAPIです。これを使えば、SolidWorksが裏側で「どこで、なぜ失敗したか」を握っている情報を直接引き出すことができます。

2. 実践:再構築エラーを検知してログを吐き出すコード

まずは、以下のコードを標準モジュールに貼り付けてみてください。このコードは、現在のパーツモデルに対して再構築を行い、エラーがあればその詳細をイミディエイトウィンドウに出力します。

Option Explicit

Sub AnalyzeRebuildErrors()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swExt As SldWorks.ModelDocExtension
Dim rebuildErrors As Long
Dim errorList As Variant
Dim i As Long

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

If swModel Is Nothing Then Exit Sub
Set swExt = swModel.Extension

‘ 1. モデルの再構築を実行
‘ ForceRebuild3(False) は現在の全フィーチャを再計算させる命令です
swModel.ForceRebuild3 False

‘ 2. エラー情報の取得
‘ GetEvaluationErrorsを実行してエラーコードを配列で取得します
rebuildErrors = swExt.GetEvaluationErrors(errorList)

‘ 3. エラー解析とログ出力
If rebuildErrors > 0 Then
Debug.Print “— エラーを検出しました —”
For i = 0 To UBound(errorList)
‘ ここで取得できるのはエラーコード。
‘ 詳細はSolidWorks API Helpの「swFeatureError_e」を参照してください
Debug.Print “フィーチャインデックス: ” & i & ” / エラーコード: ” & errorList(i)
Next i
Else
Debug.Print “再構築は正常に完了しました。”
End If
End Sub

コードのここがポイント!

  • `ForceRebuild3`: `Rebuild`ではなくこちらを使いましょう。全フィーチャを強制的に再計算させるため、潜在的なエラーを炙り出すのに最適です。
  • `errorList`: これはVariant型で受け取るのがコツです。エラーが複数ある場合、ここには配列として格納されます。
  • `swFeatureError_e`: 取得したコードを読み解くための「辞書」です。APIヘルプでこの定数を検索すると、「寸法が解決できない」「ジオメトリが不正」といった具体的な理由が分かります。

3. なぜこの設計が最強なのか

この手法をマスターすると、単にエラーを検知するだけでなく、「エラーの種類に応じたリカバリ処理」を自動化できるようになります。

例えば:

  • 寸法エラーなら:マクロが自動で別の寸法値へ補正して再構築を試みる。
  • ジオメトリエラーなら:該当フィーチャを一時的に抑制(Suppress)して、設計者に警告を送る。

このように、エラーを「止まる原因」ではなく「プログラムの分岐条件」として扱うことで、あなたのマクロは「勝手に自己修復する強力な設計アシスタント」に進化します。

4. 初心者が陥りやすい罠と対策

最後に、現場でよくある失敗を一つ。

「再構築が終わる前に次の命令を実行してしまう」

SolidWorksのAPIは、再構築のような重い処理を投げた後、完了を待たずに次の行を実行してしまうことがあります。これを防ぐには `swModel.GraphicsRedraw2` を併用したり、DoEventsで処理を待機させたりする工夫が必要です。

まずは、今日紹介したコードで「自分のモデルがどのようなエラーコードを吐くのか」を実験してみてください。自分の手元にあるモデルからエラー情報が取得できた瞬間、あなたはもう「マクロの記録」しか使えないユーザーからは卒業しています。

最後に:エンジニアとしての一歩

プログラミングとは、PCに命令を出すことではなく、「PCにどうやって問題解決させるかというロジックを教えること」です。

エラーハンドリングを制する者は、自動化を制します。ぜひ、この `GetEvaluationErrors` を武器に、より堅牢で頼れる自動化ツールを構築してください。

また分からないことがあれば、いつでも聞きに来てくださいね。あなたのコードがよりエレガントになるよう、いつでもサポートしますよ!

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