【入門編】【プロフェッショナル設計】クラスモジュールを用いたSolidWorksパーツフィーチャ生成ロジックのオブジェクト指向カプセル化 – SolidWorks VBA解析バイブル

スポンサーリンク

【脱・スパゲッティコード】クラスモジュールで構築する「メンテナンスフリー」なSolidWorks自動化アーキテクチャ

こんにちは。SolidWorksの自動化の世界へようこそ。

「マクロの記録」で生成された数百行のコードを眺めて、頭を抱えたことはありませんか? 修正しようとすればするほど崩れ去る、あの脆いコード。それは、あなたが悪いのではなく、「手続き型」という古い設計思想の限界に直面しているだけなのです。

今日は、SolidWorks VBAを「単なる道具」から「強力な設計パートナー」へ進化させるための、クラスモジュールを用いたオブジェクト指向設計の極意を伝授します。

1. なぜ「クラスモジュール」が必要なのか?

初心者のうちは、一つの長いプロシージャにすべてを詰め込みがちです。しかし、これが数ヶ月後のあなたを苦しめる「技術的負債」になります。

クラスモジュールを使う最大のメリットは、「部品の抽象化」です。
例えば、「押し出しボス」という操作を、単なるコマンドの羅列ではなく、「厚みを持った3次元形状を作るオブジェクト」として定義するのです。これにより、コードは読みやすく、再利用可能になり、何より「壊れにくい」構造になります。

2. 実践:パーツ生成の「設計図」を作る

まずは、フィーチャ操作をカプセル化するクラスモジュール `clsExtrude` を作成してみましょう。

クラスモジュール:`clsExtrude`

(VBAエディタで「挿入」→「クラスモジュール」を選択し、名前を `clsExtrude` に変更してください)

‘ 押し出しフィーチャを管理するクラス
Option Explicit

Private swApp As SldWorks.SldWorks
Private swModel As SldWorks.ModelDoc2

‘ 初期化処理:SolidWorksのインスタンスを注入する
Public Sub Initialize(app As SldWorks.SldWorks, model As SldWorks.ModelDoc2)
Set swApp = app
Set swModel = model
End Sub

‘ 押し出しを作成するメソッド
Public Function Create(depth As Double, flip As Boolean) As SldWorks.Feature
Dim swFeatMgr As SldWorks.FeatureManager
Set swFeatMgr = swModel.FeatureManager

‘ 押し出し操作を実行
‘ ※簡易化のため、選択状態のスケッチに対して実行するものとします
Set Create = swFeatMgr.FeatureExtrusion2(True, False, flip, 0, 0, depth, depth, False, False, False, False, 0, 0, False, False, False, False, True, True, True, 0, 0, False)
End Function

3. メイン処理:クラスを呼び出す「指揮者」

次に、標準モジュールでこのクラスを呼び出します。ここでのポイントは、「何をしたいか」という意図が明確なコードを書くことです。

標準モジュール:`Main`

Sub RunAutomation()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim myExtrude As clsExtrude

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

‘ クラスのインスタンス化
Set myExtrude = New clsExtrude

‘ 依存関係の注入(DIの簡易版)
myExtrude.Initialize swApp, swModel

‘ 目的のフィーチャを作成
myExtrude.Create 0.05, False ‘ 50mmの押し出しを実行

MsgBox “フィーチャ生成完了!”
End Sub

4. 陥りやすい罠と解決策

クラスモジュールを使い始めると、いくつかの壁にぶつかります。ここをクリアすれば、あなたはもう中級者です。

① インスタンスの寿命(ライフサイクル)

クラスの変数は、プロシージャを抜けると消滅します。もし複数のフィーチャを連続で操作したい場合は、コレクション(`Collection`)を使ってインスタンスを保持し続ける設計にする必要があります。

② エラーハンドリングの欠如

API操作は常に「失敗」の可能性があります(例:スケッチが選択されていない等)。クラスの中でエラーをキャッチし、呼び出し元に「何が起きたか」を伝える仕組み(`Err.Raise`の活用)を組み込みましょう。

③ 密結合を避ける

クラス同士を強く結びつけすぎないこと。あくまで「部品」として独立させ、必要なときだけ連携させるのが、メンテナンスフリーの秘訣です。

最後に:エンジニアとしての成長のために

SolidWorks VBAの自動化において、最も重要なのは「コードを機械に読ませること」ではなく「将来の自分に読ませること」です。

今日紹介したクラスモジュールによる設計は、最初は少し手間がかかるように感じるかもしれません。しかし、その手間こそが、数年後のあなたを救う「保険」になります。

「マクロの記録」という壁を越え、オブジェクトという魔法を手に入れた今、あなたの設計業務は劇的に効率化されるはずです。さあ、次はどんな機能を自動化しましょうか?

何か分からないことがあれば、いつでも聞いてくださいね。応援しています。

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