SolidWorks VBAを掌握する:クラスモジュールによる「フィーチャ生成」の極意
こんにちは。SolidWorksの自動化の世界へようこそ。
「マクロの記録」から卒業し、本格的な開発に足を踏み入れようとしているあなたへ。多くの初心者が陥る罠は、`Sub`の中に処理をすべて詰め込み、気づけば修正不可能な「スパゲッティコード」を量産してしまうことです。
今回は、プロフェッショナルが実践する「オブジェクト指向によるフィーチャ生成の設計術」を伝授します。これさえ理解すれば、あなたのマクロは単なる「作業の自動化」から「堅牢なシステム」へと進化します。
—
1. なぜ「クラスモジュール」が必要なのか?
手続き型(`Sub`のみ)のコードは、行き当たりばったりです。一方、クラスモジュールは「設計図」です。
- カプセル化: 複雑なSolidWorks APIの呼び出しを隠蔽し、使いやすいインターフェースを提供します。
- 再利用性: 一度作った「直方体作成クラス」は、別のプロジェクトでもそのまま持ち込めます。
- 保守性: もしAPIの仕様変更があっても、修正するのはクラスの中だけ。メインのコードを汚す必要はありません。
—
2. 実践:直方体を生成する「BoxBuilder」クラスを作る
まずは、VBAプロジェクトで「クラスモジュール」を挿入し、名前を`clsBoxBuilder`に変更してください。
【クラス定義】 `clsBoxBuilder`
‘ クラスモジュール: clsBoxBuilder
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 CreateBox(width As Double, depth As Double, height As Double) As Boolean
If swModel Is Nothing Then Exit Function
‘ プロフェッショナルは戻り値で成否を管理する
On Error GoTo ErrorHandler
‘ スケッチ作成と押出という「複雑な手順」を隠蔽
swModel.SketchManager.InsertSketch True
swModel.SketchManager.CreateCornerRectangle 0, 0, 0, width / 1000, depth / 1000, 0
swModel.FeatureManager.FeatureExtrusion2 True, False, False, 0, 0, height / 1000, height / 1000, False, False, False, False, 0, 0, False, False, False, False, True, True, True, 0, 0, False
CreateBox = True
Exit Function
ErrorHandler:
Debug.Print “エラー発生: ” & Err.Description
CreateBox = False
End Function
—
3. メインモジュールでの呼び出し:驚くほどシンプルに
次に、標準モジュールでこのクラスをどう使うかを見てみましょう。コードが非常にスッキリしていることに注目してください。
【標準モジュール】 `Main`
Sub RunAutomation()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim myBox As clsBoxBuilder
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
‘ クラスのインスタンス化
Set myBox = New clsBoxBuilder
‘ 初期化と実行
myBox.Initialize swApp, swModel
If myBox.CreateBox(100, 50, 20) Then
MsgBox “パーツ生成に成功しました!”
Else
MsgBox “エラーが発生しました。”
End If
End Sub
—
4. プロの視点:陥りやすいエラーとその回避策
① 単位(Units)の罠
SolidWorksのAPIは、内部的にメートル(m)で処理されます。初心者の多くが、ミリメートル単位で値を渡してモデルが崩壊するミスを犯します。
- 解決策: クラス内で`width / 1000`のように単位変換を隠蔽(カプセル化)してしまいましょう。呼び出し側は「ミリで指定すればいい」というルールを守るだけで良くなります。
② モデルが空(Nothing)の時の暴走
`swModel`が取得できていない状態でAPIを叩くと、SolidWorksは無慈悲にクラッシュします。
- 解決策: クラスの`Initialize`メソッド内で、オブジェクトが正しくセットされているか必ずチェック(`If swModel Is Nothing Then…`)する癖をつけてください。
—
終わりに:ここをクリアすれば、あなたはエンジニアです
今回紹介した「クラスを使ったカプセル化」は、一見遠回りに見えるかもしれません。しかし、プロジェクトが大きくなればなるほど、この設計があなたを救う盾となります。
「マクロを書く」のではなく「SolidWorksを操作するツールを設計する」。この視点を持つだけで、あなたの書くコードの質は劇的に向上します。
もし、さらに高度な「フィーチャの更新」や「コンフィギュレーション制御」について知りたければ、いつでも聞いてください。次は、より複雑なアセンブリ操作の深淵へご案内しましょう。
さあ、あなたの設計を、最高のコードで自動化してください!
