【入門編】【初心者向け】図面ファイル一括PDFエクスポート:シート名自動命名ルールの実装 – SolidWorks VBA解析バイブル

スポンサーリンク

こんにちは! SolidWorks自動化の世界へようこそ。
日々、何枚もの図面を開き、「名前を付けて保存」からPDF形式を選び、シート名を確認しながらファイル名を打ち直す……そんな果てしないルーチンワークに、貴重な時間と情熱をすり減っていませんか?

「マクロの記録」ボタンを押して手作業をコード化してみたものの、生成されたコードの海原を前に「どこをどう直せばいいんだ…?」と途方に暮れてしまう。今回は、そんなマクロの記録の呪縛から抜け出し、「現場で即戦力になる実用的なマクロ」を自分の手で書き上げるための第一歩を踏み出しましょう。

ここをクリアすれば、SolidWorks VBAの基本と、図面自動化の核心はバッチリです。優しく、そして本質的なアプローチで一緒にマスターしていきましょう!

—

1. なぜ「シート名でのPDF一括出力」でつまづくのか?

SolidWorksの図面(`.slddrw`)は、1つのファイルの中に複数の「シート」を持つことができます(Sheet1, Sheet2, 仕上げ図, 部品表など)。

人間であれば、画面下のタブをパパッと切り替えて「あ、このシートは『本体図』だな」と認識し、PDF保存時にファイル名を書き換えられます。しかし、VBA(マクロ)にその指示を与えるとき、私たちは「今、どのシートがアクティブなのか」「そのシートの名前は何という文字列なのか」を正確にプログラムで取得して、保存ファイル名に組み込む必要があります。

ここをサボると、「上書き保存されて最後の1枚しか残らなかった!」「全部同じ名前でエラーになった!」という悲劇が起きます。
今日のゴールは、「マルチシート図面のすべてのシートを巡回し、それぞれのシート名を自動で取得して、個別のPDFとして綺麗に吐き出す魔法のコード」を手に入れることです。

—

2. 【実践】シート名自動命名PDFエクスポート・マクロ

まずは、開発の現場でそのままコピペして使える完全版のコードをお見せします。
VBE(Visual Basic Editor)を開き、標準モジュールに貼り付けてみてください。

Sub ExportAllSheetsToPDF()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDraw As SldWorks.DrawingDoc
Dim sheetNames As Variant
Dim i As Long
Dim currentSheetName As String
Dim boolstatus As Boolean
Dim targetPath As String
Dim fileName As String
Dim ext As String
Dim dotPos As Long

‘ 1. SolidWorks アプリケーションの接続
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

‘ 2. アクティブなドキュメントが存在するか、それが図面かチェック
If swModel Is Nothing Then
MsgBox “図面ファイルが開かれていません。”, vbCritical, “エラー”
Exit Sub
End If

If swModel.GetType <> swDocDRAWING Then
MsgBox “このマクロは図面ファイル(.slddrw)でのみ実行可能です。”, vbCritical, “エラー”
Exit Sub
End If

‘ DrawingDoc インターフェースへキャスト(型変換)
Set swDraw = swModel

‘ 3. すべてのシート名を取得する
sheetNames = swDraw.GetSheetNames()

If IsEmpty(sheetNames) Then
MsgBox “有効なシートが見つかりませんでした。”, vbCritical, “エラー”
Exit Sub
End If

‘ 4. 保存先フォルダを元ファイルと同じ場所に設定
targetPath = swModel.GetPathName
If targetPath = “” Then
MsgBox “この図面はまだ保存されていません。一度保存してから実行してください。”, vbExclamation, “警告”
Exit Sub
End If

‘ ファイルパスから拡張子を除いたベース名を作成
dotPos = InStrRev(targetPath, “.”)
If dotPos > 0 Then
fileName = Left(targetPath, dotPos – 1)
Else
fileName = targetPath
End If

‘ 5. 各シートをアクティブにして個別にPDF出力
For i = LBound(sheetNames) To UBound(sheetNames)
currentSheetName = sheetNames(i)

‘ シートをアクティブに変更
boolstatus = swDraw.ActivateView(currentSheetName) ‘ ※厳密にはシート切り替えには ActivateSheet を使います
boolstatus = swDraw.ActivateSheet(currentSheetName)

If boolstatus Then
‘ 保存ファイル名の組み立て: [元ファイル名]_[シート名].pdf
Dim saveFilePath As String
saveFilePath = fileName & “_” & currentSheetName & “.pdf”

‘ PDFとして保存実行
Dim errors As Long
Dim warnings As Long
boolstatus = swModel.Extension.SaveAs(saveFilePath, 0, 0, Nothing, errors, warnings)

If Not boolstatus Then
Debug.Print “警告: シート [” & currentSheetName & “] の保存に失敗しました。”
End If
End If
Next i

‘ 完了メッセージ
MsgBox “すべてのシートのPDFエクスポートが完了しました!”, vbInformation, “処理完了”

End Sub

—

3. コードのキモを優しく解説!

初心者の方でも「おっ、なるほど!」と腑に落ちるように、このコードの重要なポイントを3つに絞って解説します。

① `swModel.GetType` で図面かどうかを厳密にチェックする

SolidWorks VBAでは、今画面が開いているドキュメント(部品、アセンブリ、図面)をひっくるめて `ModelDoc2` と呼びます。
部品が開いている状態で図面用のコードを動かすと、当然エラーで落ちてしまいます。そのため、`swModel.GetType <> swDocDRAWING` というガード節を挟み、「今、図面を開いているか?」を優しく、かつ厳格にチェックしています。

② `swDraw.GetSheetNames()` でシートの配列をごっそり手に入れる

マルチシートの図面において、シートがいくつあって、それぞれ何という名前なのかを調べるのが `GetSheetNames` メソッドです。
これは、返り値として「文字列の配列(Array)」を返してくれます。VBAの `For … Next` ループと組み合わせることで、「シートが何枚あろうと自動で全網羅する」無敵のループ構造が完成します。

③ `ActivateSheet` と `SaveAs` のコンボ技

SolidWorksで「シート単位でPDFを出力する」場合、「出力したいシートを画面上でアクティブ(選択状態)にしてから、SaveAsを実行する」というお作法が必要です。
コード内の `swDraw.ActivateSheet(currentSheetName)` がまさにその役割を果たしています。これにより、SolidWorksは「あ、今このシートをPDFにすればいいんだな」と理解してくれます。

—

4. 現場でありがちな「エラー・落とし穴」とその対策

プログラミングを始めると、必ずいくつかの壁にぶつかります。先輩エンジニアからあらかじめ注意点をシェアしておきますね。

  • 落とし穴1:「保存されていません」エラーが出る
  • 原因: 新規作成しただけで一度もファイル名をつけて保存していない図面(パスが空の状態)では、どこにPDFを保存していいか分かりません。
  • 対策: マクロを実行する前に、必ず一度 `Ctrl + S` で図面をどこかのフォルダに保存しておきましょう。(コード内でも `GetPathName` が空の時に弾く安全設計にしています)
  • 落とし穴2:ファイル名に使えない文字が入っている
  • 原因: SolidWorksのシート名に `\`, `/`, `:`, “, `?`, `”`, `<`, `>`, `|` などのWindowsでファイル名に使えない禁則文字が含まれていると、PDF保存時にエラーでコケることがあります。
  • 対策: 現場の運用ルールとして、図面のシート名には記号を避け、半角英数字や日本語(一般的なもの)を使うように意識しましょう。

—

まとめと次のステップ

今回は、SolidWorks VBAを使った「マルチシート図面のシート名自動取得・個別PDFエクスポート」の実装方法を解説しました。

  • `GetSheetNames` でシートのリストを取得する
  • ループを回して `ActivateSheet` でシートを切り替える
  • 元のファイル名にシート名を連結して `SaveAs` でPDF化する

たったこれだけのロジックを理解するだけで、毎日の手作業のストレスから解放され、よりクリエイティブな設計業務に集中できるようになります。

ここをクリアできれば、SolidWorks VBAの「ドキュメント操作の基本」はもうバッチリです!
さらにここから、「特定のシートだけ除外したい」「PDFだけでなくDXFも同時に吐き出したい」といった応用へ進むことも自由自在です。

あなたの設計オートメーション化の旅を、心から応援しています。それでは、また次回のテクニカル記事でお会いしましょう!

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