【SolidWorks VBA超入門】VBEの環境構築とイミディエイトウィンドウを活用したオブジェクト調査の第一歩
SolidWorks VBAの世界へようこそ!マクロの記録機能で「なんとなく」動いていたものが、ふとした瞬間にエラーで止まってしまい、「なぜ?」と頭を抱えた経験はありませんか?それは、SolidWorks VBAの「生きた」部分、つまりAPIオブジェクトモデルの世界に足を踏み入れるタイミングが来たサインです。
「API?オブジェクトモデル?なんだか難しそう…」と感じるかもしれませんが、大丈夫です。この記事では、あなたがSolidWorks VBAの基本をしっかりとマスターできるよう、開発環境の準備から、コードを動かしながらオブジェクトの情報をリアルタイムに調べる「イミディエイトウィンドウ」の活用法まで、優しく、そして丁寧に解説していきます。ここをクリアすれば、SolidWorks VBAの基本はバッチリですよ!
1. SolidWorks VBA開発の「玄関」:VBE(Visual Basic Editor)を開こう!
SolidWorksでVBAマクロを開発するには、まず「VBE」という専用のエディターを開く必要があります。これは、プログラミングの「作業場」のようなものです。
VBEの開き方
SolidWorksの画面上部にあるメニューバーから「ツール」→「マクロ」→「Visual Basic Editor」を選択してください。あるいは、キーボードショートカット `Alt + F11` でも一発で開けます。

(イメージ図:SolidWorksのメニューからVBEを開く様子)
VBEが開くと、少し独特な画面が表示されるかもしれません。最初は戸惑うかもしれませんが、これから一緒に見ていくので安心してください。
VBEの主要なウィンドウを知っておこう
VBEには、主に以下の3つのウィンドウがあります。これらを理解することが、VBEを使いこなす第一歩です。
- プロジェクトエクスプローラー: 現在開いているSolidWorksファイルに関連付けられたマクロプロジェクトや、標準モジュール、クラスモジュールなどが一覧表示されます。ここにコードを記述していくことになります。
- コードウィンドウ: 実際にVBAコードを記述する場所です。
- イミディエイトウィンドウ: ここが今回の主役!コードの実行結果を確認したり、特定のオブジェクトのプロパティをリアルタイムに調べたりできる、デバッグ(バグ探し)に必須のウィンドウです。
イミディエイトウィンドウを常に表示させておく習慣をつけよう
コードを書き始める前に、イミディエイトウィンドウを常に表示させておくことを強くお勧めします。
1. VBEのメニューバーから「表示」→「イミディエイトウィンドウ」を選択します。
2. あるいは、キーボードショートカット `Ctrl + G` でも表示できます。

(イメージ図:VBEのイミディエイトウィンドウ)
この小さなウィンドウが、あなたのデバッグ能力を劇的に向上させてくれます。
2. 「ブレークポイント」でコードの実行を一時停止!
「ブレークポイント」とは、コードの実行中に、その行で一時停止させるための目印です。これがあるおかげで、コードがどのように動いているのか、どの変数にどんな値が入っているのかを、実行途中でじっくり確認できるようになります。
ブレークポイントの設定方法
コードウィンドウで、実行を一時停止させたい行の左側の余白をクリックします。すると、その行に赤い丸が表示されます。これがブレークポイントです。

(イメージ図:コードウィンドウにブレークポイントを設定した様子)
ブレークポイントでの動作確認
ブレークポイントを設定したら、マクロを実行してみてください。コードはブレークポイントの行でピタッと止まります。この状態で、イミディエイトウィンドウを使ってオブジェクトの情報を調べてみましょう。
3. イミディエイトウィンドウでオブジェクトの「中身」を覗く!
いよいよ本丸です!ブレークポイントでコードの実行を止めたら、イミディエイトウィンドウでSolidWorksのオブジェクトや変数の情報をリアルタイムに確認します。
`SldWorks` オブジェクト:SolidWorksアプリケーションそのもの
SolidWorks VBAで最も基盤となるオブジェクトが `SldWorks` です。これは、SolidWorksアプリケーション全体を表します。
確認方法:
ブレークポイントで停止中に、イミディエイトウィンドウに以下のように入力して `Enter` キーを押してみてください。
? SldWorks.Caption
`?` は `Print` の省略形で、「このオブジェクトのこのプロパティの値を表示してください」という意味です。`SldWorks.Caption` は、SolidWorksのウィンドウタイトルを取得するプロパティです。実行すると、SolidWorksのウィンドウタイトルが表示されるはずです。
コード例:
Sub CheckSldWorksInfo()
Dim swApp As SldWorks
Set swApp = Application.SldWorks ‘ SolidWorksアプリケーションオブジェクトを取得
‘ ブレークポイントを設定しておきましょう
‘ Debug.Assert swApp Is Nothing ‘ この行で止まるようにする (または、他の行にブレークポイント)
‘ イミディエイトウィンドウで以下のコマンドを実行!
‘ ? swApp.Caption
‘ ? swApp.GetVBAProjectName
End Sub
- `Dim swApp As SldWorks`: `swApp` という名前の変数を、`SldWorks` 型として宣言しています。
- `Set swApp = Application.SldWorks`: `Application.SldWorks` は、現在実行中のSolidWorksアプリケーションそのものを指します。これを `swApp` 変数に代入(セット)しています。
- `? swApp.Caption`: イミディエイトウィンドウで `? swApp.Caption` と入力すると、SolidWorksのウィンドウタイトルが表示されます。
- `? swApp.GetVBAProjectName`: 現在開いているVBAプロジェクトの名前を取得します。
`ModelDoc2` オブジェクト:開いているドキュメント(部品、アセンブリ、図面)
SolidWorksで開いているドキュメント(部品ファイル、アセンブリファイル、図面ファイル)は、`ModelDoc2` というオブジェクトで表されます。
確認方法:
現在開いているドキュメントのオブジェクトを取得し、そのプロパティを調べてみましょう。
Sub CheckModelDocInfo()
Dim swApp As SldWorks
Dim swModel As ModelDoc2
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc ‘ 現在アクティブなドキュメントを取得
‘ ブレークポイントを設定しておきましょう
‘ Debug.Assert swModel Is Nothing ‘ この行で止まるようにする (または、他の行にブレークポイント)
‘ イミディエイトウィンドウで以下のコマンドを実行!
‘ ? swModel.GetTitle
‘ ? swModel.GetPathName
‘ ? swModel.GetType
End Sub
- `Dim swModel As ModelDoc2`: `swModel` という名前の変数を、`ModelDoc2` 型として宣言しています。
- `Set swModel = swApp.ActiveDoc`: `swApp.ActiveDoc` は、現在SolidWorksでアクティブになっている(一番手前に表示されている)ドキュメントを取得します。これを `swModel` 変数にセットします。
- `? swModel.GetTitle`: アクティブなドキュメントのファイル名(タイトル)を取得します。
- `? swModel.GetPathName`: ドキュメントが保存されているフルパスを取得します。
- `? swModel.GetType`: ドキュメントの種類(部品、アセンブリ、図面など)を数値で取得します。この数値に対応する意味は、SolidWorks APIヘルプで確認できます。
オブジェクトのプロパティを「自動補完」で探す!
VBEには、入力中に候補を表示してくれる「自動補完」機能があります。これがオブジェクトのプロパティやメソッド(操作)を探すのに非常に役立ちます。
1. コードウィンドウで、例えば `swModel.` と入力します。
2. すると、`swModel` オブジェクトが持っているプロパティやメソッドの一覧が表示されます。
3. ここから使いたいものを選択するか、そのまま入力を続けることで、目的のプロパティにたどり着くことができます。

(イメージ図:VBEの自動補完機能)
この自動補完機能を活用することで、APIヘルプをいちいち参照する手間が省け、効率的にコードを作成できます。
4. よくあるエラーとその回避策
初心者がつまずきやすいエラーには、いくつかのパターンがあります。
「オブジェクト変数またはWithブロック変数が設定されていません。」(エラー 91)
これは、「`Set` でオブジェクトを代入していない変数を使おうとした」場合に発生する、最も代表的なエラーです。
原因:
例えば、`Dim swModel As ModelDoc2` と宣言しただけで、`Set swModel = swApp.ActiveDoc` を実行していない、あるいは `swApp.ActiveDoc` が `Nothing` (何も代入されていない状態)だった場合に、`swModel.GetTitle` のようなコードを実行すると発生します。
回避策:
- `Set` を忘れていないか確認: オブジェクト変数には必ず `Set` を使って代入しましょう。
- オブジェクトが取得できているか確認:
If swModel Is Nothing Then
MsgBox “ドキュメントが開かれていません!”, vbExclamation
Exit Sub ‘ マクロを終了する
End If
このように、オブジェクトが `Nothing` でないかを確認するコードを挟むことで、エラーを防ぐことができます。
「オブジェクトの呼び出し、または、引数が無効です。」(エラー 424)
これもエラー91と似ていますが、より広範な「オブジェクトに関する問題」で発生します。例えば、存在しないプロパティやメソッドを呼び出そうとした場合などに起こります。
原因:
APIのプロパティ名やメソッド名を間違って入力した、あるいは、そのオブジェクトが本来持っていない操作をしようとした場合など。
回避策:
- VBEの自動補完を活用: 入力中に表示される候補から正しいものを選びましょう。
- APIヘルプの確認: 不明な場合は、SolidWorks APIヘルプで正確なプロパティ名やメソッド名を確認しましょう。
- イミディエイトウィンドウでの確認: エラーが出る箇所の手前でブレークポイントを置き、イミディエイトウィンドウで `? swModel.` のように入力して、利用可能なプロパティ・メソッドを確認するのも有効です。
5. まとめ:イミディエイトウィンドウはあなたの「賢い相棒」!
いかがでしたでしょうか?VBEの環境構築と、イミディエイトウィンドウを使ったオブジェクト調査の基本を解説しました。
- VBEを開き、イミディエイトウィンドウ (`Ctrl + G`) を常に表示させる習慣をつけましょう。
- ブレークポイントを設定して、コードの実行を途中で止められるようにしましょう。
- イミディエイトウィンドウに `? オブジェクト名.プロパティ名` と入力することで、オブジェクトの情報をリアルタイムに確認できます。
- `SldWorks` はSolidWorksアプリケーション、`ModelDoc2` は開いているドキュメントを表します。
- VBEの自動補完機能を積極的に活用しましょう。
これらの基本をマスターすれば、マクロの記録だけでは得られなかった「なぜ?」が「なるほど!」に変わるはずです。イミディエイトウィンドウは、まるでSolidWorks APIの「辞書」であり「探偵」でもあります。あなたのSolidWorks VBA開発の旅を、この賢い相棒と共に、より深く、より楽しく進めていきましょう!
次回は、さらに具体的な`ModelDoc2`のプロパティや、より複雑なオブジェクトの操作について掘り下げていく予定です。お楽しみに!
