【入門編】【SolidWorks VBA入門】SwApp.NewDocumentを使った図面テンプレートなしの純粋なパーツファイル(.sldprt)プログラム生成 – SolidWorks VBA解析バイブル

スポンサーリンク

こんにちは!SolidWorks自動化の世界へようこそ。
チーフアーキテクトの私だ。今日から君は、マウスをクリックして手作業でパーツを作るだけの「作業員」を卒業し、コード一発で3次元の世界を意のままに構築する「エンジニア」へと進化する。

記念すべき第一歩として、今回は「マクロの記録に頼らず、APIから直接まっさらなパーツファイル(.sldprt)を生成する技術」を授けよう。

ここをクリアすれば、SolidWorks VBAの基本構造はもうバッチリだ。しっかりとついてきてほしい。

なぜ「マクロの記録」だけでは不十分なのか?

SolidWorksには、操作を記録してくれる「マクロの記録」機能がある。非常に便利な機能だが、これに頼りきりになると「何もない状態から新しいファイルを作る」という肝心のスタート地点が分からなくなってしまう。

マクロの記録は、あくまで「すでに開いているドキュメントの上での操作」しか記録してくれないからだ。
「テンプレートファイルを指定して、プログラム側から新しいパーツの世界を創造する」——これこそが、自動化エンジニアの第一歩なのだ。

魔法の呪文:`SwApp.NewDocument` の正体

SolidWorksをVBAから操作する際、すべての根幹となるのが `SldWorks.SldWorks` オブジェクト(通称:`SwApp`)だ。この最高司令官に対して、こう命令する。

> 「新しいドキュメントを作ってくれ!」

ここで使用するのが `NewDocument` メソッド だ。
まずは、百聞は一見に如かず。実際に動くコードを見てみよう。

実用コード:純粋なパーツファイルをプログラム生成する

以下のコードを、SolidWorksのVBAエディタ([Alt] + [F11])に貼り付けて実行してみてほしい。

Option Explicit

Sub CreateNewPartTheSmartWay()

‘ 1. 宣言と初期化(SolidWorksアプリケーションの取得)
Dim swApp As SldWorks.SldWorks
Set swApp = Application.SldWorks

If swApp Is Nothing Then
MsgBox “SolidWorksが起動していません。”, vbCritical
Exit Sub
End If

‘ 2. テンプレートファイルのパスを指定
‘ ※環境に合わせて標準的なパーツテンプレートのパスを指定してください
Dim templatePath As String
templatePath = swApp.GetUserPreferenceStringValue(swDefaultTemplatePart)

‘ もしデフォルトテンプレートが取得できない場合のフォールバック(環境依存パスの例)
If templatePath = “” Then
templatePath = “C:\ProgramData\SolidWorks\SolidWorks 2023\templates\Part.sldprt”
End If

‘ 3. ドキュメントの種類とテンプレートを指定して新規作成
‘ swDocPART = 1 (パーツ), 2 = アセンブリ, 3 = 図面
Dim swModel As SldWorks.ModelDoc2
Dim documentType As Long
documentType = swDocPART

Set swModel = swApp.NewDocument(templatePath, documentType, 0, 0)

‘ 4. エラーハンドリング(生成失敗時の対策)
If swModel Is Nothing Then
MsgBox “パーツドキュメントの生成に失敗しました。テンプレートパスを確認してください。”, vbCritical
Exit Sub
End If

‘ 5. 起動直後の初期設定(例:単位系をミリメートル・グラム・秒 [MMGS] に強制設定)
‘ 単位設定: swUnitLength = 1, swMM = 2
Dim setUserPreference As Boolean
setUserPreference = swModel.SetUserPreferenceIntegerValue(swUnitLength, swMM)

‘ 6. 成功メッセージ
MsgBox “新しいパーツファイルが正常に生成されました!”, vbInformation, “SolidWorks VBA 講座”

End Sub

コードの深掘り解説:プロが教える3つのポイント

このコードには、現場で生き残るための知恵が詰まっている。重要な3つのポイントを解説しよう。

1. `Application.SldWorks` でエンジンを掴む

VBAの世界では、開いているSolidWorksのプロセスを `Application.SldWorks` で取得することから全てが始まる。ここをミスすると何も始まらないので、まずは変数の型(`SldWorks.SldWorks`)とセットで確実に覚えよう。

2. なぜ「テンプレート」が必要なのか?

「図面テンプレートなしの純粋なパーツ生成」というテーマだが、SolidWorksの仕様上、完全に無の状態(ゼロバイト)から3D空間を構築することはできない。 単位系や原点情報、デフォルトのプレーン(正面・上面・右側面)などの「DNA」を引き継ぐためのテンプレートパスがどうしても必要なのだ。
コード内では、ユーザーが普段使っているデフォルトのテンプレートパスを `swApp.GetUserPreferenceStringValue` で自動取得するようにしている。これにより、PC環境が変わってもエラーが出にくい堅牢なコードになる。

3. 生成された瞬間にオブジェクトを掴む (`ModelDoc2`)

`swApp.NewDocument` を実行すると、SolidWorksの画面上に新しいパーツが開くと同時に、VBA側には `ModelDoc2` というオブジェクトが返される。
この `swModel` こそが、今後スケッチを描き、押し出し、フィレットをかけるための「リモコン」となる。このリモコンをしっかり変数に格納できたかどうかが、次のステップへの分かれ道だ。

初学者がハマりやすい「罠」と対策

現場でよくあるエラーと、その回避策を伝えておこう。

  • 罠1:テンプレートのパスが見つからない
  • 原因:社内標準のテンプレートフォルダの場所が異なっていたり、SolidWorksのバージョンによってパスが違う。
  • 対策:コード内にあるように、まずは `swDefaultTemplatePart` を使ってSolidWorksにデフォルトの場所を聞き出すのがスマートだ。
  • 罠2:日本語のシート名やパスで文字化けする
  • 原因:VBAの文字列処理の仕様によるもの。
  • 対策:ネットワークドライブ上のテンプレートを指定する場合などは、UNCパス(`\\server\folder\…`)ではなく、極力ローカルのパスか、上述のデフォルト取得機能を使うこと。

おわりに

お疲れ様でした!これで君は、マクロの記録という「過去の遺産」から脱却し、自分の手でSolidWorksのセカイをゼロから構築する力を手に入れた。

ここをクリアすれば、次は「スケッチの描き方」「フィーチャ(押し出し等)の生成」へと進むことができる。
基礎さえしっかり押さえておけば、どんなに複雑な3Dモデルの自動化も怖くない。

次のステップでも、私と一緒に最高にエキサイティングな自動化の世界を極めていこう。それでは、また次の記事で!

タイトルとURLをコピーしました