【入門編】【エラーハンドリング】On Error Resume NextとErr.Clearの適切なスコープ設計による泥臭いリトライ処理の実装 – SolidWorks VBA解析バイブル

スポンサーリンク

【SolidWorks VBA】マクロが止まるのは「君のせい」じゃない。泥臭いリトライ処理こそが自動化の真髄だ

こんにちは。現場で「マクロが途中で止まって動かなくなった」という悲鳴を何度聞いたかわかりません。

SolidWorksを自動化していると、必ずぶち当たる壁があります。「APIは完璧に書いたはずなのに、なぜか選択エラーで止まる」「再構築(Rebuild)が間に合わずに処理がすり抜ける」。

マクロの記録から脱却しようとする皆さんが、最初に出会う「挫折の正体」です。でも安心してください。これは君のコードが悪いのではなく、SolidWorksという巨大なエンジンの「呼吸」に合わせていないだけなのです。

今日は、プロの現場で実際に使われている「泥臭いリトライ処理」の設計思想を伝授します。

1. なぜ、SolidWorksは「空振り」するのか?

SolidWorksのAPIは、Windows上の他のアプリケーションと比べて非常に繊細です。特にフィーチャの生成や選択において、以下の要因で簡単に「空振り」します。

  • 描画の遅延: ジオメトリ生成後、メモリ上で計算が完了する前に次のコードが走ってしまう。
  • 選択の不確定性: 選択したはずの面が、再構築によって一時的に消滅したりIDが変わったりする。

ここで初心者は `On Error Resume Next` を適当にコードの先頭に書いて、全てを隠蔽しようとします。これは禁じ手です。 バグを隠し、原因特定を不可能にする「死のレシピ」だからです。

2. プロの設計:スコープを絞った「局所的」エラーハンドリング

エラーハンドリングの鉄則は、「エラーが発生する可能性のある場所」を最小単位に絞り、そこでだけ監視を行うことです。

以下のコードを見てください。これが「泥臭くも確実に仕事を完遂する」ためのテンプレートです。

Public Sub SafeFeatureCreate()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim retryCount As Integer
Dim success As Boolean

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

retryCount = 0
success = False

‘ 3回までは粘り強くリトライする設計
Do While retryCount < 3 And Not success ' 【重要】エラー監視の範囲をここに限定する On Error Resume Next ' ジオメトリ操作のメイン処理 Call PerformComplexOperation(swModel) ' エラーが発生していなければ成功とみなす If Err.Number = 0 Then success = True Else ' エラー発生時はログを残し、少し待機して再構築を促す Debug.Print "リトライ中: " & retryCount + 1 & "回目" Err.Clear ' 重要:エラー状態をリセットしないと次で誤検知する swModel.EditRebuild3 ' モデルの再構築を強制 Sleep 1000 ' 1秒待機(APIの反映を待つ) retryCount = retryCount + 1 End If ' 【重要】エラー監視を解除(これ以降は通常のデバッグができるようにする) On Error GoTo 0 Loop If Not success Then MsgBox "何度トライしても失敗しました。モデルの構造を確認してください。" End If End Sub

このコードの「賢い」ポイント

1. On Error Resume Next の局所化: `On Error GoTo 0` で必ず監視を解除しています。こうすることで、関係ない場所でのバグを隠蔽しません。
2. Err.Clear の儀式: これを忘れると、最初のエラーがいつまでも残り続け、処理がループから抜け出せなくなります。
3. Sleep と Rebuild: SolidWorksが処理を追い付くための「呼吸の余白」を作っています。これがあるだけで、安定感が劇的に変わります。

3. なぜ「泥臭さ」が必要なのか

エンジニアリングの現場において、「100%成功するコード」は存在しません。 存在するなら、それはたまたまモデルが単純だっただけです。

「もし失敗したら、どうリカバリするか?」「どこまでなら許容して再試行するか?」というフォールバック(代替ルート)を設計することこそが、自動化エンジニアとしての腕の見せ所です。

  • マクロの記録: 動作をなぞるだけ。
  • プロのVBA: 失敗を予見し、失敗すらもシステムの一部として制御する。

最後に:君も「自動化の職人」になれる

「エラーが出ないように書く」のではなく、「エラーが出ても自力で立ち上がるコードを書く」。この視点を持つだけで、君が書くマクロの信頼性は数段跳ね上がります。

まずは、自分のコードの中で「一番不安定でよく止まる処理」を見つけ出し、そこにこのリトライ・パターンを組み込んでみてください。

「あれ、いつも止まってた場所をスルーして動いた!」という感動を味わえたなら、君はもう一段上のステージに上がった証拠です。

ここをクリアすれば、SolidWorks VBAの基本はもうバッチリ。自信を持って、次の複雑な自動化に挑戦してください。応援していますよ。

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