AutoCAD VBAでDXF出力を完全掌握せよ:レイヤー・線種・色を制御する「自動化の極意」
こんにちは。AutoCADの自動化の世界へようこそ。
「マクロの記録」ボタンを押して、生成されたコードの解読に頭を抱えるのは今日で卒業です。
今回は、実務で頻出する「DXFエクスポートの自動化」というテーマを扱います。外部システムや他CADとの連携において、単にファイルを保存するだけでは不十分です。「どのレイヤーを出すか」「線種をどう変換するか」。これらをVBAで制御できれば、あなたの業務効率は劇的に向上します。
今日は、AutoCAD VBAの真髄である「オブジェクトのライフサイクル」と「制御の作法」を伝授しましょう。
—
1. なぜ「SaveAs」だけではダメなのか?
初学者が最初に陥る罠は、`ThisDrawing.SaveAs` を使ってDXF形式を指定するだけのコードです。
しかし、現場の要求はもっと複雑です。「特定のレイヤーだけを出力したい」「色や線種をDXF側で標準化したい」。
DXFエクスポートには、実は「システム変数」が深く関わっています。VBAからこれらを一時的に書き換え、処理後に元に戻すという「環境の管理」こそが、堅牢なエンジニアの作法です。
—
2. 実践:DXFエクスポート自動化コード
以下のコードは、現在の図面から指定した条件でDXFを出力するテンプレートです。まずはこれを見て、構造を把握してください。
Public Sub ExportToDXF_Advanced()
Dim dwgName As String
Dim dxfPath As String
‘ 1. ファイルパスの確定(安全なパス操作)
dwgName = ThisDrawing.FullName
dxfPath = Left(dwgName, InStrRev(dwgName, “.”)) & “dxf”
‘ 2. 環境設定の退避(エラー発生時の巻き戻しを想定)
Dim oldCmdEcho As Integer
oldCmdEcho = ThisDrawing.GetVariable(“CMDECHO”)
ThisDrawing.SetVariable “CMDECHO”, 0 ‘ コマンドラインの余計な出力を抑制
‘ 3. DXF出力の実行
‘ ここではDXFOUTコマンドをSendCommandで制御します
‘ 注意:VBAのSaveAsメソッドは詳細なフィルタリング設定を引数に持ちません
‘ 複雑な抽出が必要な場合は、フィルタリングしたコピー図面を一時作成する手法がベストです
On Error Resume Next
ThisDrawing.SendCommand “_DXFOUT” & vbCr & dxfPath & vbCr & “V” & vbCr & “2018” & vbCr
‘ 4. 環境の復元
ThisDrawing.SetVariable “CMDECHO”, oldCmdEcho
If Err.Number = 0 Then
MsgBox “DXF出力が完了しました:” & vbCrLf & dxfPath
Else
MsgBox “エラーが発生しました:” & Err.Description
End If
End Sub
—
3. ここがプロの視点:陥りやすい罠と対策
① オブジェクトの「ロック」と「排他」
AutoCADのデータベースは、コマンド実行中に別の処理を行うと即座にクラッシュします。`SendCommand`を使う際は、必ず `DoEvents` を挟むか、処理が終わるまで待機する工夫が必要です。
② バージョン互換性の呪縛
`”2018″` と指定している箇所に注目してください。DXFはバージョンが変われば構造が大きく異なります。
- R12 DXF: 古いシステムやNC加工機向け。非常に軽量だが属性情報が削ぎ落とされる。
- 2018 DXF: 最新の属性を維持するが、古いシステムでは読めない可能性がある。
相手先システムの仕様を必ず確認し、ここを定数化しておくのがエンジニアの鉄則です。
③ レイヤー・色の制御(フィルタリングの極意)
もし「特定のレイヤーだけを抜きたい」という高度な要求があるなら、「テンプレート図面へのコピー」が正解です。
1. 空のテンプレート図面を開く。
2. 元の図面から必要なレイヤー・オブジェクトだけを `CopyObjects` メソッドで抽出する。
3. そのコピーした図面をDXFとして保存する。
これが、AutoCADの内部データベースを破壊せず、最もクリーンにDXFを生成する方法です。
—
4. 次のステップへ:自動化の先にある世界
ここをクリアしたあなたは、もう「マクロの初心者」ではありません。
次のステップは、「イベント処理」です。
「図面を保存した瞬間に自動でDXFをバックアップする」といった機能を実装すれば、あなたのPCは24時間体制の専属オペレーターに変わります。
AutoCAD VBAは、ただコードを書く場所ではありません。「図面という広大なデータ空間を制御する魔法の杖」です。
何かうまくいかないことがあれば、それはAutoCADが「もっと正しく、安全に操ってくれ」と語りかけている証拠。そのエラーメッセージこそが、あなたを成長させる最高の教科書です。
さあ、コードを書いて、自分だけの自動化ツールを育てていきましょう。応援しています!
