こんにちは!SolidWorksの自動化の世界へようこそ。
マクロの記録ボタンを押して生成されたコードをそのまま動かすところから一歩進み、「もっと自分の思い通りに、かつプロのように爆速で動くプログラムを書きたい!」と思い始めた頃ではないでしょうか。
今回は、SolidWorks VBAのパフォーマンスと開発効率を劇的に引き上げる「早期バインディング(Early Binding)」という極上のテクニックについてお話しします。
ここをクリアすれば、あなたの書くコードは見違えるほど洗練され、処理速度も跳ね上がります。一緒にSolidWorks VBAの本質に迫っていきましょう!
—
1. なぜ「遅延バインディング」はもどかしいのか?
マクロの記録を使ったり、ネット上のサンプルコードをコピーしたりすると、よくこんな記述を見かけませんか?
‘ 【遅延バインディング(Late Binding)の例】
Dim swApp As Object
Set swApp = CreateObject(“SldWorks.Application”)
一見、何の問題もないように見えますよね。
この `CreateObject` を使って `Object型` としてオブジェクトを生成する方法を「遅延バインディング(遅い結合)」と呼びます。
これは、プログラムが「実行されるその瞬間」まで、それがSolidWorksなのかExcelなのか、あるいは何者なのかを理解していません。例えるなら、「目隠しをさせられた状態で、手探りで道具を探しながら仕事をしている状態」です。
これには大きなデメリットが2つあります。
1. 実行速度が遅い: 実行時に毎回オブジェクトの型を解釈するため、大量のフィーチャを操作するループ処理などで致命的なタイムロスが生じます。
2. インテリセンス(入力補完)が効かない: `swApp.` と打っても、次に使えるメソッドやプロパティの一覧(ドロップダウン)が出てくれません。公式リファレンスを片手に、スペルミスに怯えながらコードを書くことになります。
—
2. 早期バインディング(Early Binding)という名の翼
これを解決するのが、今回マスターする「早期バインディング(早期結合)」です。
事前にSolidWorksの「型ライブラリ」をVBAプロジェクトに読み込ませておき、変数に `Object` ではなく「専用の型(`SldWorks.SldWorks` など)」を直接指定します。
これは、「作業机の上がどこに何があるか完全に整理され、さらに優秀なアシスタントが予測変換でサポートしてくれる状態」です。
早期バインディングの圧倒的なメリット
- 爆速の実行パフォーマンス: 実行時の型解決が不要になり、特にループ処理や大規模アセンブリの走査で圧倒的なスピード差が出ます。
- 強力なインテリセンス: `swApp.` と打った瞬間に、使えるコマンドがすべてポップアップ表示されます。もうスペルミスで悩むことはありません。
- 定数(Const)の直接利用: `swDocPART` や `swExtentsType_t` といったSolidWorks独自の定数を、数値を調べることなくそのまま記述できます。
—
3. 実践!早期バインディングを導入する3ステップ
それでは、実際に設定とコードの書き換えていきましょう。ここが今日のハイライトです。
ステップ1:参照設定の追加
VBAエディタ(Alt + F11)を開いたら、上部メニューの [ツール] > [参照設定] をクリックします。
一覧の中から、お使いのSolidWorksのバージョンに合わせた以下のチェックボックスをオンにします。
- `sあるphab順の一覧から探す場合`
- `SldWorks x.x Type Library`
- `SolidWorks x.x Constants Type Library` (※定数を使うために絶対必要です!)
> 先輩からのワンポイントアドバイス
> バージョン番号(`x.x`)はSolidWorks 2023なら `31`、2024なら `32` のように入っています。もし他のPCや別バージョンとファイルを共有することが多い場合は、後述する「互換性への配慮」も頭に入れておきましょう。
—
ステップ2:洗練されたコードを書く
参照設定が完了したら、コードをこのように書き換えます。
‘ ==============================================================================
‘ 【テーマ】早期バインディングによる新規パーツ作成と押し出しフィーチャ生成
‘ ==============================================================================
Sub CreateEarlyBindingPart()
‘ 1. 専用の型(SldWorks.SldWorks)を直接宣言(インテリセンスが効きます!)
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeatMgr As SldWorks.FeatureManager
‘ 2. 起動中の、あるいは新規のSolidWorksインスタンスを取得
‘ ※早期バインディングでは New 演算子や ComAddin等もスマートに扱えます
Set swApp = New SldWorks.SldWorks
If swApp Is Nothing Then
MsgBox “SolidWorksが起動できませんでした。”, vbCritical
Exit Sub
End If
‘ 3. 新規パーツドキュメントの作成
‘ 定数(swDocPART)がそのまま使える美しさ!
Set swModel = swApp.NewDocument(“C:\ProgramData\SolidWorks\SolidWorks 2024\templates\Part.prt”, 0, 0, 0)
If swModel Is Nothing Then
MsgBox “パーツドキュメントの作成に失敗しました。”, vbCritical
Exit Sub
End If
‘ 4. フィーチャマネージャの取得と何らかの処理…
Set swFeatMgr = swModel.FeatureManager
MsgBox “早期バインディングによるパーツ作成が正常に完了しました!”, vbInformation, “極限の知見”
End Sub
どうですか? このコードの美しさと、記述のスマートさ。
`swDocPART` のような定数を覚える必要がなく、入力補完でサクサク選べる感動をぜひご自身のVBAエディタで味わってほしいいところです。
—
4. 陥りやすい罠とプロの回避術
早期バインディングは最強ですが、実務で使う際には1点だけ注意すべき罠があります。それは「参照設定のバージョン違いによるコンパイルエラー」です。
例えば、あなたが「SolidWorks 2024(Type Library 32)」で上記のコードを書き、それをSolidWorks 2023(Type Library 31)を使っている同僚に渡すと、VBAが「ライブラリが見つからない!」とパニックを起こしてエラー(参照不可エラー)になってしまいます。
現場で使える解決策:ハイブリッド手法(条件付きコンパイル)
社内でマクロを配布する場合などは、基本は遅延バインディングで安全性を担保しつつ、開発時や個人用ツールでは早期バインディングの恩恵を受ける、といった設計にすることもあります。
しかし、社内のSolidWorksのバージョンが統一されている環境であれば、迷わず「早期バインディング」を採用すべきです。パフォーマンスのメリットが圧倒的に上回るからです。
—
まとめ
今回はSolidWorks VBAのパフォーマンスを極限まで引き上げる「早期バインディング」について解説しました。
- 遅延バインディング(`CreateObject` / `Object型`):
- 柔軟だが、遅い・補完が効かない・定数が使えない。
- 早期バインディング(参照設定 + 専用型):
- 設定が必要だが、爆速・強力なインテリセンス・定数がそのまま使えてミスゼロ。
ここをクリアすれば、あなたはもう「マクロの記録をいじっているだけの初学者」ではありません。SolidWorksの内部構造を理解し、APIを自在に操る「自動化エンジニア」の仲間入りです。
日々の設計業務をスマートに、そしてエキサイティングにするために、ぜひ今日のコードから早期バインディングを取り入れてみてくださいね。それでは、次回の極限の知見でお会いしましょう!
