【入門編】【マルチドキュメント一括印刷の自動化】SwApp.DocumentVisibleとPrintOut2を組み合わせたバックグラウンド印刷キュー制御 – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorks VBAの極意:バックグラウンド印刷で「フリーズ地獄」から解放される自動化術

こんにちは。SOLIDWORKS APIの世界へようこそ。
日々、何百枚もの図面を「手動で開いて、印刷ボタンを押して、待つ……」という作業に時間を溶かしていませんか?

もしあなたが、「マクロの記録」ボタンを押すだけの段階を卒業し、プロフェッショナルな自動化エンジニアを目指すなら、今日紹介する「バックグラウンド・ドキュメント制御」は、必ず身につけるべき最初の関門です。

今回は、SolidWorksをフリーズさせず、メモリを枯渇させない「スマートな一括印刷」の核心を伝授します。

1. なぜ「画面表示」が最大のボトルネックなのか

初心者が最初に陥る罠は、`swApp.OpenDoc6` を使って図面を次々と画面に表示し、`PrintOut2` を実行することです。これには2つの致命的な欠陥があります。

1. グラフィック描画の負荷: 図面が開くたびに画面を再描画するため、PCのリソースが消費されます。
2. メモリリークの温床: ドキュメントを正しく閉じる処理(`swApp.CloseDoc`)を忘れると、SolidWorksは一瞬でメモリ不足に陥り、クラッシュします。

これを解決するのが、`DocumentVisible` プロパティ を使った「不可視状態での制御」です。

2. バックグラウンド制御の設計図

「画面に表示せず、裏側で処理し、印刷が終わったら即座にメモリから解放する」。このライフサイクルをコードに落とし込みます。

実践コード:高速・安全な一括印刷マクロ

Sub BatchPrintAutomation()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim filePaths As Variant
Dim i As Integer

Set swApp = Application.SldWorks

‘ 印刷したい図面ファイルのパスリスト
filePaths = Array(“C:\Drawings\Part1.slddrw”, “C:\Drawings\Part2.slddrw”)

‘ プロセス効率化:印刷時は再描画を止めるのが鉄則
swApp.UserControl = False

For i = LBound(filePaths) To UBound(filePaths)
‘ 【重要】不可視状態で開くための準備
‘ swApp.DocumentVisible = False とすると、以降開くファイルは裏側で待機する
swApp.DocumentVisible False, swDocDRAWING

Set swModel = swApp.OpenDoc6(filePaths(i), swDocDRAWING, swOpenDocOptions_Silent, “”, 0, 0)

If Not swModel Is Nothing Then
‘ 印刷実行
‘ PrintOut2(FromPage, ToPage, Copies, Collate, PrinterName, PrintToFile, PageSetup)
swModel.PrintOut2 “”, “”, 1, False, “”, False, “”

‘ 【最重要】処理が終わったら即座に閉じる(メモリ解放の義務)
swApp.CloseDoc swModel.GetTitle
End If
Next i

‘ 最後に可視状態を戻す(忘れるとSolidWorksが消えたように見えるので注意!)
swApp.DocumentVisible True, swDocDRAWING
MsgBox “印刷が完了しました。”
End Sub

3. コードの「意味」を深く理解する

このコードがなぜ優れているのか、エンジニアの視点で解説します。

  • `swApp.DocumentVisible False`:

これを呼び出すと、SolidWorksは「ウィンドウを作成しない」モードになります。これにより、描画処理をスキップできるため、処理速度が飛躍的に向上します。

  • `swApp.UserControl = False`:

自動化中にユーザーが誤ってSolidWorksを操作するのを防ぎます。

  • `swApp.CloseDoc`:

自動化において、「開いたものは必ず閉じる」は鉄則中の鉄則です。これをループ内に配置することで、どれだけ大量のファイルを処理しても、メモリ使用量を一定に保つことができます。

4. 陥りやすいエラーと回避策

Q: 「印刷がプリンタに飛ばない!」

A: `PrintOut2` は、SolidWorksの「ページ設定」に依存します。各図面ファイルに保存されているプリンタ設定が古いと、印刷が止まることがあります。事前に `swModel.PageSetup` で設定を上書きするか、ファイル側の設定を最新に保つ運用を徹底してください。

Q: 「マクロ終了後、SolidWorksが完全に消えた?」

A: `swApp.DocumentVisible` を `False` にしたまま終了すると、次回の起動時にウィンドウが表示されず焦ることになります。必ず `True` に戻す処理を忘れないようにしましょう。

最後に:エンジニアとしてのマインドセット

自動化とは、単にコードを書くことではありません。「SolidWorksという巨大なシステムの機嫌を損ねないこと」です。

今回紹介した「不可視処理」と「メモリ解放」をマスターすれば、あなたの業務効率は劇的に変わるはずです。まずは小さな数枚の図面からテストしてみてください。

次は、「エラーハンドリング(ファイルが見つからない場合のスキップ処理)」について深掘りしていくと、さらに堅牢なツールになりますよ。また次の講義でお会いしましょう。応援しています!

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