【入門編】【実務中級者向け】DWF/DWFxエクスポートの自動化:閲覧専用フォーマットへの一括変換とパブリッシュ設定 – AutoCAD VBA解析バイブル

スポンサーリンク

こんにちは!AutoCAD VBAの世界へようこそ。
日々、何十枚、何百枚ものDWG図面を開いて「DWFに変換して……」と手作業で保存していませんか? その単調な繰り返し作業、今日で完全に卒業しましょう。

今回は、実務で圧倒的な時短を生み出す「DWF/DWFxエクスポートの自動化」をテーマに解説します。

マクロの記録ボタンを押しただけでは絶対に辿り着けない、プロット構成(PlotConfiguration)と連携したスマートな一括変換の極意を、優しく、そして深く伝授します。ここをクリアすれば、あなたのVBAスキルは間違いなく中級者の領域に突入しますよ!

—

1. なぜDWFエクスポートをVBAで自動化するのか?

「DWF(Design Web Format)」やその進化系である「DWFx」は、AutoCADを持たないクライアントや現場のメンバーと図面を共有するための、いわば「超軽量な閲覧専用フォーマット」です。

PDFも便利ですが、大規模な3Dモデルやレイヤー情報、正確なベクターデータを保持したまま、圧倒的な軽さを誇るDWFは、図面管理の現場で今なお重宝されています。

しかし、これを手動でやろうとすると……
1. `PLOT` コマンドを開く
2. プリンタ/プロッタに「DWF6 ePlot.pc3」を選ぶ
3. 用紙サイズやペンテーブルを設定する
4. 保存先を指定して出力する

これを全レイアウト、全図面ファイルに対して行う地獄……想像しただけで手が痛くなりますよね。これをVBAで一網打尽にします。

—

2. VBAにおける「プロット(印刷)」の基本構造を理解する

AutoCAD VBAで印刷やエクスポートを制御する際、最も重要なのが「Layout(レイアウト)」オブジェクトと「Plot(プロット)」オブジェクトの関係です。

AutoCADの図面には、必ず「モデル空間(Model)」と、図面枠を配置する「レイアウト(Layout1, Layout2…)」が存在します。DWFへの書き出しは、実物のプリンタ用紙に出力するのと全く同じロジック——つまり「仮想プリンタ(PC3ファイル)への出力」として処理します。

そのため、VBAからエクスポートを行う大まかな流れは以下のようになります。

1. 対象のレイアウトを取得する
2. 出力先のデバイス(PC3)や用紙サイズをコードで指定・確認する
3. `Plot` オブジェクトの `PublishToDWF` または `PlotToFile` メソッドを呼び出す

—

3. 実践!DWFエクスポート自動化マクロ

それでは、実務でそのまま使えるコードを見ていきましょう。
今回は、現在開いている図面の「すべてのレイアウト(モデル空間を含む、またはレイアウトタブのみ)」を、指定したフォルダへ一括でDWF/DWFx形式として書き出すプロシージャを作成します。

Sub ExportActiveDrawingToDWF()
Dim doc As AcadDocument
Set doc = ThisDrawing

‘ 出力先フォルダのパス(環境に合わせて変更してください)
Dim exportPath As String
exportPath = “C:\AutoCAD_Output\”

‘ フォルダの存在確認・作成(簡易チェック)
If Dir(exportPath, vbDirectory) = “” Then
MkDir exportPath
End If

Dim layoutObj As AcadLayout
Dim plotObj As AcadPlot
Set plotObj = doc.Plot

‘ 図面内のすべてのレイアウトをループ処理
For Each layoutObj In doc.Layouts
‘ 「モデル」タブを除外したい場合は If layoutObj.Name <> “Model” Then などの条件を追加

‘ 出力ファイル名の組み立て(図面名_レイアウト名.dwf)
Dim baseName As String
baseName = Left(doc.Name, InStrRev(doc.Name, “.”) – 1)
Dim fileName As String
fileName = exportPath & baseName & “_” & layoutObj.Name & “.dwf”

‘ アクティブなレイアウトを切り替え
doc.ActiveLayout = layoutObj

‘ 【重要】プロット設定の構成
‘ ※あらかじめレイアウト側に「DWF6 ePlot.pc3」等のページ設定が紐付いている前提です
On Error GoTo ErrorHandler

‘ DWFファイルへプロットを実行
‘ PlotToFileの引数: (出力ファイルパス, [PC3ファイル名])
‘ ※ここではレイアウトに保存済みのページ設定を使用するため、ファイル名のみを指定
plotObj.PlotToFile fileName

Debug.Print “成功: ” & layoutObj.Name
GoTo NextLayout

ErrorHandler:
Debug.Print “失敗: ” & layoutObj.Name & ” エラー内容: ” & Err.Description
Resume Next

NextLayout:
Next layoutObj

MsgBox “DWFエクスポートが完了しました!”, vbInformation, “自動化完了”
End Sub

コードの解説とここがポイント!

  • `doc.ActiveLayout = layoutObj`

AutoCADのプロットエンジンは、現在アクティブになっているレイアウトに対して処理を行う傾向が強いため、ループ内で明示的にアクティブレイアウトを切り替えています。

  • `plotObj.PlotToFile fileName`

これが核心です。物理的なプリンタの代わりにDWFドライバーが設定されていれば、この1行でバックグラウンド、あるいはアクティブ画面上でパブリッシュ(出力)が走ります。

  • エラーハンドリング(`On Error GoTo`)

大量の図面やレイアウトを処理する際、特定のレイアウトに不正なオブジェクトがあったり、ページ設定が壊れているとマクロがそこでストップしてしまいます。実務では必ずエラー処理を挟み、次のループへ逃げる構造にしましょう。

—

4. 陥りやすい罠とエラー回避の知見(チーフアーキテクトからの助言)

現場でこのコードを動かしたとき、中級者が必ずハマる「3つの罠」があります。これを事前に知っておくだけで、開発スピードが何倍も変わります。

罠1:「PC3ファイルが見つからない」エラー

コード中で `PlotToFile` を実行した際、「有効なプロッタが設定されていません」というエラーが出る場合、対象レイアウトの「ページ設定(Page Setup)」に、DWF用のプリンタ(例: `DWF6 ePlot.pc3`)が正しく割り当てられていません。

  • 対策: 事前にテンプレート側で「DWF6 ePlot.pc3」をデフォルトのプロッタとして紐づけておくか、VBA側で `PlotConfiguration` オブジェクトを操作して動的にPC3を割り当てるコードを前段に挟む必要があります。

罠2:同名ファイル上書き時のポップアップブロック

すでに同名のDWFファイルが存在する場合、AutoCADは「ファイルを上書きしますか?」というダイアログを出してユーザーの入力を待ちます。これが起きると、VBAの処理が裏で完全にフリーズしたように止まってしまいます。

  • 対策: あらかじめ出力先フォルダ内の同名ファイルを `Kill` 関数で削除しておくか、AutoCADのシステム変数 `FILEDIA` を `0`(ダイアログ非表示)に一時的に設定するアプローチが有効です。

‘ 既存ファイルがある場合は強制削除してポップアップを防ぐ
If Dir(fileName) <> “” Then
Kill fileName
End If

罠3:バックグラウンドプロットとの競合

AutoCADにはバックグラウンドで印刷(パブリッシュ)を行う機能(システム変数 `BACKGROUNDPLOT`)があります。VBAから連続して `PlotToFile` を呼び出す際、バックグラウンド処理が追いつかずにメモリリークや排他制御エラーを引き起こすことがあります。

  • 対策: 大量の一括処理を行うマクロの最初と最後で、バックグラウンドプロットを一時的に無効化(`0`に設定)すると、非常に安定して動作します。

—

5. おわりに:ここをクリアすれば、あなたはもう自動化のプロ

いかがでしょうか?
「DWFエクスポートの自動化」は、単なるファイルの保存にとどまらず、AutoCADの印刷エンジン(Plot/Layout)の仕組みを深く理解する必要がある、非常にやりがいのあるテーマです。

今回紹介したコードをベースに、「指定したフォルダ内のすべてのDWGファイルを自動で開いて、それぞれのモデル空間をDWFにする」というファイル横断型(FileSystemObjectの活用)のバッチ処理へと発展させれば、あなたの業務効率は文字通り「次元が変わる」はずです。

「ここをもっとこうしたい」「こんなエラーが出るんだけど」といった疑問があれば、ぜひ手を動かしながら壁にぶつかってみてください。その試行錯誤の数だけ、あなたのエンジニアとしての血肉になります。

それでは、快適なAutoCAD VBAライフを!次回の記事もお楽しみに。

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