こんにちは。図面管理やデータ共有の作業に、毎度うんざりしていませんか?
「数十枚、あるいは数百枚もあるDWG図面を、1枚ずつ開いて『印刷』ボタンを押し、PDFとして保存する…」
そんな不毛な手作業を繰り返すために、私たちはエンジニアになったわけではありません。
今回は、実務中級者に向けて「複数図面のPDF一括エクスポートと印刷設定の自動化」をテーマに、AutoCAD VBAの極意を伝授します。
マクロの記録をポチポチ押すだけのレベルは今日で卒業です。AutoCADの裏側でドキュメントがどう生き、どう消えていくのか。その「ライフサイクル」の本質を理解すれば、どんな大量の図面処理も一瞬で終わるようになります。
ここをクリアすれば、AutoCAD VBAの基本はバッチリですよ。一緒に温かく、かつロジカルにマスターしていきましょう!
—
1. なぜ「マクロの記録」では一括処理できないのか?
AutoCADには便利な「マクロの記録」機能がありますが、これを使って複数図面のバッチ処理をやろうとすると必ず行き詰まります。
なぜなら、マクロの記録は「今画面に開かれているアクティブな図面」に対する人間のマウス操作のトレースに過ぎないからです。図面を閉じたり、別のフォルダから次々とサイレントに開いて処理したりする「制御構造(ループや条件分岐)」を書くことができません。
そこで登場するのが、AutoCAD VBA (Visual Basic for Applications) と COMオブジェクト(API) です。
VBAを使えば、AutoCADのUI(画面)を前面に出さずに、裏側(バックグラウンド)で図面をモリモリ開き、印刷設定を流し込み、PDFとして吐き出しては閉じる…という神業が可能になります。
—
2. 印刷自動化のキモ:レイアウトとPlotオブジェクト
AutoCADでPDFを出力するとき、人間は「印刷ダイアログ」を開いて、プリンタに「DWtoPDF.pc3」を選び、用紙サイズやCBS(印刷スタイル)を設定しますよね。
VBAの世界では、これをコードで指示します。対象となるのは主に以下の2つのオブジェクトです。
1. Layoutオブジェクト: 「レイアウト(タブ)」のこと。用紙サイズや向き、印刷スタイル(ctb/stb)はこのレイアウトが持っています。
2. Plotオブジェクト: 実際に「印刷を実行する」機能を持った実務部隊です。
陥りやすい罠:ペーパー空間とモデル空間
「図面をPDFにする」とき、多くの場合「レイアウト(ペーパー空間)」を対象にします。モデル空間全体をPDFにしようとすると、縮尺が狂ったり変な範囲が切り出されたりして実務で使い物になりません。
今回のコードでは、各図面の「アクティブなレイアウト」に対して適切な印刷設定を強制適用し、PDFへパブリッシュ(エクスポート)します。
—
3. 実践!複数図面PDF一括エクスポート・コード
それでは、現場でそのままコピペして使える実用コードを公開します。
このスクリプトは、「指定したフォルダ内にあるすべてのDWGファイルを順番に読み込み、PDFに変換して、指定フォルダに保存する」ものです。
Sub BatchExportToPDF()
Dim fso As Object
Dim targetFolder As String
Dim pdfFolder As String
Dim file As Object
Dim doc As AcadDocument
Dim activeLayout As AcadLayout
Dim plotObj As AcadPlot
Dim targetFile As String
‘ 【設定】処理対象のDWGフォルダと保存先PDFフォルダを指定してください
targetFolder = “C:\AutoCAD_Work\TargetDWG\”
pdfFolder = “C:\AutoCAD_Work\OutputPDF\”
‘ フォルダの存在チェック(FileSystemObjectを使用)
Set fso = CreateObject(“Scripting.FileSystemObject”)
If Not fso.FolderExists(targetFolder) Then
MsgBox “対象フォルダが存在しません: ” & targetFolder, vbCritical
Exit Sub
End If
If Not fso.FolderExists(pdfFolder) Then
fso.CreateFolder (pdfFolder)
End If
‘ 画面描画をフリーズさせて処理速度を劇的に向上させる(超重要テクニック)
ThisDrawing.Application.Preferences.Display.TextScreenampilkan = False
‘ フォルダ内の全ファイルを走査
For Each file In fso.GetFolder(targetFolder).Files
If UCase(fso.GetExtensionName(file.Name)) = “DWG” Then
targetFile = file.Path
On Error GoTo ErrorHandler
‘ 図面をバックグラウンド(非表示に近い状態)でオープン
‘ ※完全非表示にするにはAcadApplicationのDocuments.Openを使います
Set doc = Documents.Open(targetFile, True) ‘ ReadOnly = True
‘ アクティブなレイアウトを取得
Set activeLayout = doc.Layouts.Item(doc.ActiveLayout.Name)
‘ 1. プリンタに「AutoCAD PDF」を指定
activeLayout.ConfigName = “DWToPDF.pc3”
‘ 2. 用紙サイズを指定(例: A4縦 “A4” またはISO拡大 “ISO_A4 (210.00 x 297.00 ミリ)” 等環境依存あり)
‘ ※環境にある正確な用紙サイズ名をカレントレイアウトに設定します
‘ activeLayout.CanonicalMediaName = “ISO_A4 (210.00 x 297.00 ミリ)”
‘ 3. 印刷スタイル(CTB)の適用
activeLayout.StyleSheet = “monochrome.ctb”
‘ 4. 印刷領域を「レイアウト」に設定 (AcPlotType: 0=範囲, 1=図面枠, 2=表示, 3=レイアウト, 4=窓)
activeLayout.PlotType = acLayout
‘ 5. 縮尺を「1:1」に固定
activeLayout.StandardScale = acScaleToFit ‘ またはカスタム縮尺
‘ 6. プロット(印刷)実行オブジェクトの取得
Set plotObj = doc.Plot
‘ 保存するPDFのファイルパスを生成
Dim pdfName As String
pdfName = pdfFolder & fso.GetBaseName(file.Name) & “.pdf”
‘ PDFへエクスポート実行(PlotToFileメソッド)
‘ 第1引数: 出力先PDFファイルパス, 第2引数: PC3ファイル名
Call plotObj.PlotToFile(pdfName, “DWToPDF.pc3”)
‘ 変更を保存せずに図面を閉じる(メモリリーク防止の鉄則)
doc.Close False
End If
Next file
‘ 画面描画を復元
ThisDrawing.Application.Preferences.Display.TextScreenampilkan = True
MsgBox “すべての図面のPDFエクスポートが完了しました!”, vbInformation, “処理終了”
Exit Sub
ErrorHandler:
MsgBox “エラーが発生しました。ファイル名: ” & targetFile & vbCrLf & “詳細: ” & Err.Description, vbCritical
If Not doc Is Nothing Then
doc.Close False
End If
Resume Next
End Sub
—
4. プロの現場で生きる「3つの極意(知見)」
上記のコードには、単なる「動くコード」を超えた、AutoCAD VBAアーキテクトとしてのこだわりが詰まっています。ここを押さえておかないと、実務で痛い目を見ます。
① 画面描画のフリーズ (`TextScreenampilkan` / `ScreenUpdate`)
大量の図面を次々に開閉する際、AutoCADが律儀に毎回の画面レイアウトを描画していると、PCのファンが爆音を立てて回りだし、処理時間が何倍にも膨れ上がります。
描画を一時的にオフにすることで、CPUのパワーを純粋なファイル処理と印刷演算に集中させることができます。
② メモリ管理と `doc.Close False` の徹底
AutoCAD VBAで最も恐ろしいのは「メモリリーク(ゾンビプロセスの発生)」です。
ループの中で図面を開いたはいいが、エラー時に閉じ忘れたりすると、裏側でAutoCADのプロセスが死にきれずに残り続け、PCのメモリを食い潰します。
コード内に `On Error GoTo ErrorHandler` を設け、万が一エラーで処理が中断しても、必ず `doc.Close False`(変更を破棄して閉じる)を通す安全装置がプロの条件です。
③ プリンタドライバと用紙サイズの依存性
コード中の `”DWToPDF.pc3″` や用紙サイズ名(`”ISO_A4…”`)は、実行するPCのAutoCAD環境(プリンта設定ファイルがどこにあるか)に依存します。
もしエラーが出る場合は、あらかじめ手動で一度図面を開き、「ページ設定管理」から使用可能な正確なPC3ファイル名と用紙名を確認してください。
—
まとめ
今回は、AutoCAD VBAを使った「複数図面のPDF一括エクスポートと印刷設定の自動化」について、実務に耐えうる堅牢なコードとともに解説しました。
- マクロの記録の限界を知り、ループとオブジェクト制御に移行する
- Layoutオブジェクトで印刷設定(プリンタ・CTB・用紙)をプログラムから完全に支配する
- エラーハンドリングとメモリ解放(`doc.Close`)を絶対に忘れない
この3つを自分のものにしたあなたなら、もう「単なるVBA初心者」ではありません。
手作業の地獄から解放された自由な時間で、さらに高度な設計自動化や、業務プロセスの改善に挑戦していきましょう。
あなたのAutoCADライフが、よりスマートで創造的なものになりますように!
