こんにちは!SolidWorks自動化の現場で、日々泥臭くもエレガントなマクロを書き続けている先輩エンジニアです。
「マクロの記録」を使ってコードを覗いてみたものの、なんだかよく分からない呪文の羅列に圧倒されていませんか?「よし、自動化するぞ!」と意気込んでパーツを開いたはいいものの、人によって単位系(ミリかインチか)がバラバラだったり、社内標準のプロパティが入っていなかったりして、頭を抱えた経験はありませんか?
ここをクリアすれば、SolidWorks VBAの基本はバッチリですよ。
今回は、実務で絶対に避けて通れない「社内標準テンプレートを強制適用した安全な新規パーツ作成」の極意を、優しく、そして本質的に解説していきます。
—
なぜ「標準テンプレートの強制適用」が必要なのか?
初心者がやりがちな失敗の代表格が、引数なしで新しいドキュメントを作ってしまうことです。
‘ =【危険なアンチパターン】=
‘ これだとSolidWorks側のデフォルト設定に依存してしまい、
‘ ある人は「インチ」、ある人は「ミリ」でパーツが生成されて大混乱に!
SwApp.NewDocument “”, 0, 0, 0
これでは、図面の単位ズレや、カスタムプロパティの欠落など、後工程で致命的な手戻りが発生します。プロの自動化エンジニアなら、「どのテンプレートを使うか」をコードで完全に統制するべきです。
それを実現するのが、SldWorksオブジェクトの `NewDocument` メソッドです。
—
現場で即戦力になる!安全な新規パーツ作成コード
それでは、実務でそのままコピペして使える完全版のコードを公開します。
ファイルパスの存在チェック(エラーハンドリング)も組み込んだ、堅牢性の高い設計になっています。
Option Explicit
Sub Main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim templatePath As String
Dim documentType As Long
Dim paperSize As Long
Dim pageWidth As Double, pageHeight As Double
‘ 1. SolidWorksアプリケーションのインスタンスを取得
Set swApp = Application.SldWorks
If swApp Is Nothing Then
MsgBox “SolidWorksが起動していません。”, vbCritical, “致命的エラー”
Exit Sub
End If
‘ ==========================================================
‘ 2. 社内標準テンプレートのパスを指定(※環境に合わせて変更してください)
‘ ==========================================================
templatePath = “C:\ProgramData\SolidWorks\SOLIDWORKS 2024\templates\社内標準部品.prtdot”
‘ 3. テンプレートファイルの存在確認(ここが実務では超重要!)
If Dir(templatePath) = “” Then
MsgBox “指定されたテンプレートが見つかりません。” & vbCrLf & _
“パスを確認してください: ” & templatePath, vbExclamation, “ファイル不在”
Exit Sub
End If
‘ 4. 新規ドキュメントのパラメータ設定
documentType = swDocPART ‘ パーツファイルを指定 (0: swDocNONE, 1: swDocPART, 2: swDocASSEMBLY, 3: swDocDRAWING)
paperSize = 0 ‘ パーツなので通常は0でOK
pageWidth = 0 ‘ 独自サイズ指定不要の場合は0
pageHeight = 0 ‘ 独自サイズ指定不要の場合は0
‘ ==========================================================
End Sub
(※おっと、肝心のパーツを作る行が途切れていましたね。心優しき先輩として、続きの核心部分をしっかり記述します)
‘ 5. テンプレートを強制適用して新規パーツを作成
‘ NewDocument(ModelTemplate, PaperSize, Width, Height)
Set swModel = swApp.NewDocument(templatePath, paperSize, pageWidth, pageHeight)
‘ 6. 生成成功の確認
If swModel Is Nothing Then
MsgBox “パーツの新規作成に失敗しました。”, vbCritical, “エラー”
Exit Sub
End If
‘ 成功メッセージ
MsgBox “社内標準テンプレートから新規パーツの作成に成功しました!”, vbInformation, “完了”
End Sub
—
コードの深掘り解説:ここがプロのポイント
初心者から一歩抜け出すために、上記のコードで絶対に押さえておくべき「3つのキモ」を解説します。
① `Option Explicit` はエンジニアの命綱
コードの最一行目に書かれている `Option Explicit`。これ、何だか知っていますか?
これを書いておくと、変数の宣言漏れ(タイポなど)をVBAが強制的に検知してくれます。これを怠ると、「変数のスペルミスに気づかず、動かないマクロに何時間も悩まされる」という呪いにかかるので、必ずセットで書きましょう。
② `Dir関数` による存在チェックの美学
コード内にある以下のロジック。
If Dir(templatePath) = “” Then …
もし指定したパスにテンプレートがなかった場合、いきなり `NewDocument` を呼ぶとSolidWorksがフリーズしたり、実行時エラーでマクロが強制終了します。
「コードを実行する前に、そもそもファイルが存在するかを確認する」。この一手間が、あなたの書くマクロを「プロ品質」に引き上げます。
③ マジックナンバーを避ける定数の活用
`documentType = swDocPART` の部分です。
実は `1` と直接書いても動くのですが、APIの仕様が変わったときにバグの温床になります。SolidWorksが用意してくれている「定数(Enum)」を使うことで、コードの意図が誰が見ても一目で分かるようになります。
—
よくあるトラブルと解決策(FAQ)
> Q. コードを実行しても「テンプレートが見つかりません」と言われてしまいます。
> A. ネットワークドライブ(共有サーバーなど)にある `.prtdot` を指定していませんか? VPNの接続状況や、PCが変わった際のパスの差異が原因のことが多いです。まずはローカル環境にテンプレートをコピーして、絶対パスが正しいかエクスプローラで確認してみてください。
> Q. 単位系がやっぱりミリになりません。
> A. テンプレートファイル自体(`.prtdot`)の初期設定がインチになっている可能性があります。一度そのテンプレートを開き、ドキュメントプロパティから「単位」を「MMGS(ミリ・グラム・秒)」に設定した上で、上書き保存し直してください。テンプレートの土台が正しければ、マクロも完璧に応えてくれます。
—
まとめ
お疲れ様でした!
今回は `NewDocument` メソッドを使って、社内標準テンプレートを強制適用した新規パーツ作成の自動化を学びました。
- 初期設定のブレを防ぐためにテンプレートパスを必ず指定する
- `Dir` 関数で事前にファイルの存在チェックを行う
- `Option Explicit` で堅牢なコードを書く
ここをクリアできたあなたなら、もう「マクロの記録」をただ貼り付けるだけの初心者ではありません立派なSolidWorks自動化エンジニアの第一歩を踏み出しています。
この調子で、日々の面倒なルーティンワークをコードの力でスマートに撃ち抜いていきましょう!それでは、次回の応用編でお会いしましょう。
