【入門編】【初心者向け】SolidWorks図面の新規作成と標準シートフォーマット自動適用のVBAマクロ – SolidWorks VBA解析バイブル

スポンサーリンク

【初心者向け】SolidWorks図面の新規作成と標準シートフォーマット自動適用のVBAマクロ

こんにちは!普段の設計業務、お疲れ様です。

SolidWorksを使っていて、「モデルが完成したら図面を起こし、社内指定の図面枠(シートフォーマット)を設定する」という作業を、毎回手動で繰り返していませんか?

「マクロの記録」を使ってみたものの、再現性がなくて途中で止まってしまったり、違うパソコンで動かしたらエラーになったり……そんな経験がある方も多いのではないでしょうか。

この記事では、「マクロの記録」を卒業し、プログラムで図面ドキュメントを新規作成し、社内標準の図面枠を確実に自動割り当てするVBAコードを解説します。

一見難しそうに見えるSolidWorks APIですが、仕組みさえ理解してしまえばとてもシンプルです。ここをクリアすれば、SolidWorks VBAの基本はバッチリですよ!一緒に自動化の第一歩を踏み出しましょう。

—

1. 概念の整理:「テンプレート」と「シートフォーマット」の違い

コードを書く前に、初心者が最も混乱しやすい「図面テンプレート」と「シートフォーマット」の違いを整理しておきましょう。ここを正しく理解しておくことが、エラーを出さない最大のコツです。

【図面ファイル (.slddrw)】
├── 図面テンプレート (.drwdot) : 単位系、寸法スタイル、ビューの初期設定などの「ルール」
└── シートフォーマット (.slddrt) : 会社ロゴ、外枠、表題欄、注記などの「見た目の枠」

  • 図面テンプレート (`.drwdot`)
  • 図面全体の設定(JIS/ISOなどの規格、単位系、フォント設定など)を保持する「器」です。
  • シートフォーマット (`.slddrt`)
  • 図面の外枠、表題欄、社名ロゴなど、用紙の上に描かれる「図面枠」そのものです。

プログラムで図面を自動生成するときは、「まずテンプレートで箱を作り、そこに指定のシートフォーマット(図面枠)を着せ替える」という2段階のステップを踏みます。

—

2. 自動化の全体像(処理の流れ)

今回作成するマクロの処理フローは以下の通りです。

1. アクティブなモデル(部品またはアセンブリ)を取得
2. デフォルトの図面テンプレートを使って新規図面を作成
3. 指定した「社内標準シートフォーマット(.slddrt)」を読み込んで適用
4. 用紙サイズや縮尺(スケール)を自動セット

この流れを頭に入れて、実際のコードを見ていきましょう。

—

3. 【コピペOK】図面新規作成&シートフォーマット適用VBAコード

以下のコードを、SolidWorksのマクロ編集画面(VBAエディタ)に貼り付けて実行してみてください。

> ※注意
> コード内の `SHEET_FORMAT_PATH`(シートフォーマットのパス)は、ご自身の環境に存在する `.slddrt` ファイルのパスに書き換えてください。

Option Explicit

‘ ==============================================================================
‘ 機能: アクティブなモデルから新規図面を作成し、指定のシートフォーマットを適用する
‘ ==============================================================================
Sub Main()
‘ — 1. オブジェクト変数の宣言 —
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDraw As SldWorks.DrawingDoc
Dim swSheet As SldWorks.Sheet

Dim defaultTemplatePath As String
Dim sheetFormatPath As String
Dim boolStatus As Boolean

‘ — 2. 適用したい社内標準シートフォーマット(.slddrt)のパスを指定 —
‘ ※環境に合わせて必ず実在するファイルパスに変更してください
sheetFormatPath = “C:\ProgramData\SolidWorks\SOLIDWORKS 2024\lang\japanese\sheetformat\a3 – iso.slddrt”

‘ SolidWorksアプリケーションオブジェクトの取得
Set swApp = Application.SldWorks

‘ — 3. アクティブなドキュメント(部品・アセンブリ)の確認 —
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then
MsgBox “部品またはアセンブリモデルを開いた状態で実行してください。”, vbExclamation, “エラー”
Exit Sub
End If

‘ 開いているのが図面ファイルの場合は処理を中断
If swModel.GetType = swDocDRAWING Then
MsgBox “モデル(部品またはアセンブリ)を開いて実行してください。”, vbExclamation, “エラー”
Exit Sub
End If

‘ — 4. デフォルトの図面テンプレートパスを取得 —
defaultTemplatePath = swApp.GetUserPreferenceStringValue(swUserPreferenceStringValue_e.swDefaultTemplateDrawing)

If defaultTemplatePath = “” Then
MsgBox “デフォルトの図面テンプレートが見つかりません。SolidWorksのシステムオプションを確認してください。”, vbCritical, “エラー”
Exit Sub
End If

‘ — 5. 新規図面ドキュメントの作成 —
‘ NewDocument ( テンプレートパス, 用紙サイズ, 幅, 高さ )
‘ ※用紙サイズに swDwgPaperA3size などを渡すとテンプレート側で指定された幅・高さが適用されます
Set swDraw = swApp.NewDocument(defaultTemplatePath, swDwgPaperA3size, 0, 0)

If swDraw Is Nothing Then
MsgBox “図面ドキュメントの作成に失敗しました。”, vbCritical, “エラー”
Exit Sub
End If

‘ — 6. シートフォーマットの適用と用紙設定 —
‘ アクティブなシートを取得
Set swSheet = swDraw.GetCurrentSheet()

‘ SetupSheet5 の引数解説:
‘ SetupSheet5(シート名, 用紙サイズ, 用紙ソース, 縮尺分子, 縮尺分母, 第一角法か, フォーマットパス, 幅, 高さ, プロパティ参照ビュー名)
boolStatus = swDraw.SetupSheet5( _
swSheet.GetName(), _
swDwgPaperSizes_e.swDwgPapersUserDefined, _
swDwgPaperSource_e.swDwgPaperSourceAutomatic, _
1, 2, _
False, _
sheetFormatPath, _
0.42, 0.297, _
“Default” _
)

‘ — 7. 画面の再描画 —
swDraw.ForceRebuild3 True

If boolStatus Then
MsgBox “図面の新規作成とシートフォーマットの適用が完了しました!”, vbInformation, “成功”

‘ Note: ライフサイクル管理
‘ 参照したオブジェクトを解放(メモリリーク防止のグッドプラクティス)
Set swSheet = Nothing
Set swDraw = Nothing
Set swModel = Nothing
Else
MsgBox “シートフォーマットの適用に失敗しました。ファイルパスを確認してください。”, vbExclamation, “警告”
End If
End Sub

—

4. コードの「心臓部」を解剖する

コードの中で特に重要なAPIメソッドを2つピックアップして、わかりやすく解説します。

① `swApp.NewDocument` (図面を新規に起こす)

Set swDraw = swApp.NewDocument(defaultTemplatePath, swDwgPaperA3size, 0, 0)

第一引数に「標準テンプレートのパス」を渡すことで、SolidWorks内に設定されたデフォルトの図面環境を呼び出します。手動操作で「ファイル」>「新規作成」>「図面」をクリックする操作と同じ役割です。

② `swDraw.SetupSheet5` (シートフォーマットを適用する)

今回の要となるのがこのメソッドです。

boolStatus = swDraw.SetupSheet5( _
swSheet.GetName(), _ ‘ 対象のシート名
swDwgPaperSizes_e.swDwgPapersUserDefined, _ ‘ 用紙サイズ(ユーザー定義)
swDwgPaperSource_e.swDwgPaperSourceAutomatic, _
1, 2, _ ‘ 縮尺(この場合は 1:2)
False, _ ‘ 三角法(False = 第三角法、True = 第一角法)
sheetFormatPath, _ ‘ 割り当てる.slddrtファイルのパス
0.42, 0.297, _ ‘ 用紙の幅と高さ(メートル指定:A3サイズ = 420mm x 297mm)
“Default” _ ‘ プロパティ参照モデルビュー
)

  • ポイント1:単位は「メートル (m)」

SolidWorks API内部での長さの基本単位はメートルです。A3サイズを指定する場合、幅 `0.42`(420mm)、高さ `0.297`(297mm)と記述します。ここを `420` と書くと、超巨大な図面枠が作られてしまうので注意してくださいね!

  • ポイント2:投影法の指定

5番目の引数(`FirstAngle`)は、`False` を指定することで日本の製造業で標準的な「第三角法」になります。

—

5. 初心者が絶対ハマる「3つの罠」と回避策

SolidWorks VBAの開発において、初心者が突き当たる代表的なトラブルとその対策をまとめました。

罠1:図面枠が白紙(バツ印)になってしまう

【原因】 `sheetFormatPath` に指定した `.slddrt` ファイルが存在しないか、パスが間違っています。
【対策】 エクスプローラーで実際のファイルパスを確認し、文字列をそのままコピー&ペーストしましょう。特にネットワークドライブ(`\\Server\Share\…`)上のファイルを指定している場合、アクセス権限で弾かれることもあるので、まずはローカルドライブ(`C:\…`)のパスで試すのがおすすめです。

罠2:「型が一致しません」というコンパイルエラー

【原因】 `swApp.NewDocument` の戻り値は `ModelDoc2` オブジェクトですが、図面固有の操作(`SetupSheet5`など)をするために `DrawingDoc` 型の変数に格納する必要があります。
【対策】 VBAでは `Set swDraw = swApp.NewDocument(…)` と書けば自動で型キャスト(変換)されますが、参照設定で「SolidWorks commands type library」や「SolidWorks Constant type library」が適切に読み込まれているか確認しましょう。

罠3:マクロ実行後にSolidWorksの動作が重くなる

【原因】 プログラム内で生成したオブジェクト変数を解放していないため、メモリ上に不要な参照が残ってしまう(メモリリーク)現象です。
【対策】 処理の最後で、使ったオブジェクト変数に対して `Set swDraw = Nothing` のように `Nothing` を代入するクセをつけておくと、動作が非常に安定します。

—

6. まとめと次のステップ

今回は、SolidWorks VBAの基本中の基本である「図面の新規作成」と「標準シートフォーマットの自動割り当て」を解説しました。

  • テンプレート (`.drwdot`) とシートフォーマット (`.slddrt`) は別物
  • `NewDocument` でベースを作成し、`SetupSheet5` で図面枠を割り当てる
  • API内部の単位は「メートル」であることに注意する

ここまでの処理ができるようになれば、次は「モデルの主ビューや等角図を自動配置する」、「モデルのカスタムプロパティ(品名や図番)を図面表題欄に自動反映する」といった本格的な自動化へとステップアップできます!

一歩ずつコードを書いて動作を確認しながら、業務効率化の爽快感を味わっていきましょう。

何か分からないことやエラーで詰まったら、いつでも尋ねてくださいね。応援しています!

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