こんにちは。SolidWorksの世界へようこそ。
マクロの記録ボタンを押して、生成された長大なコードを眺めて「なぜ動いているのか分からない」と頭を抱えたことはありませんか?
今日は、そんな初心者レベルを卒業し、「穴ウィザード(Hole Wizard)」というSolidWorks APIの深淵に挑むためのガイドを書きました。単なる自動化を超え、独自の設計ルールをシステムに実装する——その第一歩を、一緒に踏み出しましょう。
—
1. なぜ「マクロの記録」では穴ウィザードを制御できないのか?
まず、厳しい現実をお伝えします。穴ウィザードの操作を「マクロの記録」で追うと、何百行ものコードが生成されます。しかし、それらは「その時、その場所でクリックした」という座標情報に過ぎません。
私たちが目指すのは、「`FeatureManager.FeatureHoleWizard` メソッドを叩き、設計意図を直接APIに流し込む」というプロの流儀です。これをマスターすれば、JIS規格外の特殊な座ぐりや、独自の深さ設定を持つ穴を、一瞬で数百個配置できるようになります。
—
2. 穴ウィザードを制する「WizardHoleFeatureData」の正体
SolidWorksの穴ウィザードは、単なる円柱の切り抜きではありません。`WizardHoleFeatureData` という専用のデータ構造体が、穴の規格、種類、サイズ、深さ、公差などを統合的に管理しています。
このオブジェクトを操作するための「極意」は、以下の3ステップに集約されます。
1. データ定義の初期化: `CreateDefinition` でテンプレートを作成する。
2. パラメータの注入: `HoleData` に個別の数値を書き込む。
3. フィーチャの生成: `FeatureManager` に構造体を投げ込む。
—
3. 実践コード:カスタム座ぐり穴を生成する
それでは、実際にコードを見てみましょう。ここでは、標準規格にはない「深さ15mm、座ぐり径12mm」といった特殊な穴を生成する例です。
Sub CreateCustomHole()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeatureMgr As SldWorks.FeatureManager
Dim swHoleData As SldWorks.WizardHoleFeatureData2
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swFeatureMgr = swModel.FeatureManager
‘ 1. 穴ウィザードのデータ定義オブジェクトを作成
‘ swWzdCounterbore: 座ぐり穴, swStandardJIS: JIS規格(ベースとして利用)
Set swHoleData = swFeatureMgr.CreateDefinition(swFtrType_HoleWizard)
swHoleData.HoleType = swWzdCounterbore
swHoleData.Standard = swStandardJIS
‘ 2. パラメータのカスタマイズ (ここが肝です)
‘ 規格に縛られず、個別に数値を上書きします
swHoleData.CounterBoreDiameter = 0.012 ‘ 12mm
swHoleData.CounterBoreDepth = 0.005 ‘ 5mm
swHoleData.HoleDiameter = 0.006 ‘ 6mm
swHoleData.EndType = swEndCondThroughAll ‘ 貫通穴にする
‘ 3. 面を選択してフィーチャ生成(事前に面を選択しておく必要があります)
swModel.InsertFeatureTreeFolder2 swFeatureMgr.FeatureHoleWizard(swHoleData)
MsgBox “特殊穴の生成が完了しました!”
End Sub
コードの解説と「罠」への注意点
- 単位系: API内の数値は常に「メートル法(m)」です。10mmと入力したい場合は `0.01` と記述してください。ここを間違えて「穴が小さすぎる!」と騒ぐのが初心者の通過儀礼です。
- 事前の面選択: `FeatureHoleWizard` は、どの面に穴を開けるかという「面」の選択情報が必要です。プログラムを実行する前に、必ず対象となる面を選択(`SelectByID2`等を使用)しておきましょう。
—
4. 陥りやすいエラーを回避する「プロの視点」
現場でよくある失敗は、「規格名とパラメータの不一致」です。
`swStandardJIS` を指定しているにも関わらず、存在しないサイズを無理やり注入しようとすると、SolidWorksはエラーを吐いて停止します。これを回避するコツは、「まずは標準的な穴を作成し、そのデータ構造をデバッグモードで覗き込む」ことです。
変数 `swHoleData` にカーソルを合わせ、ローカルウィンドウでどのようなプロパティが有効になっているか確認してください。「規格名」と「パラメータ」の関係性が理解できれば、あとはあなたの自由です。
—
最後に:自動化の先にあるもの
穴ウィザードをプログラムで制御できるようになると、製品設計は「描く」ものから「定義する」ものへと変わります。
「ここをクリアすれば、SolidWorks VBAの基本はバッチリですよ」。
次は、アセンブリ全体に対してこの処理を一括適用したり、ExcelのCSVデータから穴位置を読み込んで自動配置したりと、応用範囲は無限大です。
あなたの設計業務が、このコードによって少しでもクリエイティブな時間へと変わることを願っています。何か不明な点があれば、いつでも聞いてください。壁を越えるまで、私が伴走します。
