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という巨大なシステムの機嫌を損ねないこと」です。
今回紹介した「不可視処理」と「メモリ解放」をマスターすれば、あなたの業務効率は劇的に変わるはずです。まずは小さな数枚の図面からテストしてみてください。
次は、「エラーハンドリング(ファイルが見つからない場合のスキップ処理)」について深掘りしていくと、さらに堅牢なツールになりますよ。また次の講義でお会いしましょう。応援しています!
