こんにちは!AutoCAD VBAの世界へようこそ。
マクロの記録ボタンを押すだけの操作から一歩抜け出して、「自分の手で図面を自在にコントロールしたい」そう思われたなら、あなたはもう立派な開発者の卵です。
今回は、実務の現場で意外と直面する「古いCADシステムとのデータ互換」をテーマに、現在進行形で現役バリバリに使われている超実用テクニックをお伝えします。
ここをクリアすれば、AutoCAD VBAのファイル操作の基本はバッチリですよ。温かく、そして深く、その極意を伝授しましょう。
—
1. なぜ「DXF(R12形式)」なのか?
現代のAutoCADが扱うDWG形式は非常に高機能で素晴らしいものですが、歴史のある古い専用CADや、他社の安価な互換CADシステムの中には、最新のDWGや複雑なDXFを読み込めず、「フリーズする」「図形が消える」といった悲劇を起こすものが少なくありません。
そこで登場するのが、「DXF(R12形式)」です。
R12 DXFの圧倒的な強み
- 歴史の長さと単純さ: AutoCAD Release 12(1992年リリース!)の時代から続く、最もシンプルで枯れたデータ構造。
- 究極の互換性: ほとんどの古いCADやNC工作機械、GISソフトが「これなら確実に読める」とする共通のパスポート。
- 余計なデータがない: 3Dソリッドや複雑なカスタムオブジェクトがそぎ落とされ、基本図形(線、円、文字など)だけに強制変換されるため、データ破損のリスクが極めて低い。
実務では、「取引先から古いCADで読める形式でくれと言われた」「レーザー加工機の専用ソフトがR12しか受け付けない」といった場面で、この保存マクロが文字通り「救世主」になります。
—
2. VBAにおける「名前を付けて保存(SaveAs)」の罠
AutoCAD VBAでファイルを保存するには、`Document`オブジェクトの `SaveAs` メソッドを使用します。
しかし、ここで初心者の方が必ずと言っていいほどハマる「罠」があります。
それは、「どのファイル形式(バージョン)で保存するかを明示的に指定しなければならない」という点です。これを怠ると、今のAutoCADの最新形式で保存されてしまい、何の意味もなくなってしまいます。
ファイル形式を指定する魔法の引数
`SaveAs` メソッドには、保存先のパスだけでなく、「ファイルフォーマット(AcSaveAsType 定数)」を渡す必要があります。
AutoCAD R12形式のDXFを指定する場合、このフォーマット引数には `acDXF12` という定数を使用します。
—
3. 実践!R12 DXF保存マクロのコード
それでは、実際に開発環境(VBAエディタ / 10キーの `Alt + F11`)を開いて貼り付けられる、実用的なコードを見ていきましょう。
このコードは、現在アクティブになっている図面ファイルを、元のファイル名と同じ名前で、指定したフォルダに「R12形式のDXF」として保存するものです。
Sub ExportToR12DXF()
‘ =====================================================================
‘ 目的: 現在の図面を AutoCAD R12 互換の DXF 形式で保存する
‘ 対象: 初心者~中級者向け(マクロの記録からのステップアップ)
‘ =====================================================================
‘ エラーハンドリングの準備(トラブル時にフリーズするのを防ぎます)
On Error GoTo ErrorHandler
Dim doc As AcadDocument
Set doc = ThisDrawing.Application.ActiveDocument
‘ 1. 図面が一度も保存されておらず、名前がない場合は処理を中断
If doc.Path = “” Then
MsgBox “この図面はまだ一度も保存されていません。” & vbCrLf & _
“一度名前を付けて保存してから実行してください。”, vbExclamation, “保存エラー”
Exit Sub
End If
‘ 2. 保存先フォルダのパスを決定(今回は元の図面と同じフォルダにします)
Dim targetFolder As String
targetFolder = doc.Path & “\”
‘ 3. 拡張子を除いたファイル名を取得
Dim originalName As String
Dim baseName As String
originalName = doc.Name
baseName = Left(originalName, InStrRev(originalName, “.”) – 1)
‘ 4. 出力先のフルパスを組み立て(例: C:\Works\Drawing1.dxf)
Dim dxfPath As String
dxfPath = targetFolder & baseName & “_R12.dxf”
‘ 5. 【最重要】R12 DXF形式で保存を実行
‘ 第2引数の「acDXF12」が、古いCADとの互換性を担保するキモです!
doc.SaveAs dxfPath, acDXF12
‘ 成功メッセージ
MsgBox “R12 DXF形式での保存が完了しました!” & vbCrLf & _
“保存先: ” & dxfPath, vbInformation, “処理成功”
Exit Sub
ErrorHandler:
‘ 予期せぬエラーが発生した場合の優しさ
MsgBox “エラーが発生しました。” & vbCrLf & _
“詳細: ” & Err.Description, vbCritical, “予期せぬエラー”
End Sub
—
4. コードの深掘り解説:エンジニアの知見
上記のコードで、特に注目してほしいポイントを解説します。ここを理解すると、他のファイル保存処理も自由自在になります。
① `doc.Path` と `doc.Name` のコンビネーション
AutoCAD VBAでは、ファイルの「フォルダパス」と「ファイル名(拡張子付き)」が別々のプロパティになっています。
- `doc.Path`: `C:\MyFolder` (最後の円マーク「\」は含まれないのがポイント!)
- `doc.Name`: `Sample.dwg`
これらを組み合わせて `targetFolder & “\” & baseName & “…` とすることで、元ファイルと同じ場所に安全に別名保存(出力)することができます。
② `acDXF12` という定数の正体
コードに出てくる `acDXF12` は、AutoCADが内部で持っている「列挙体(Enum)」と呼ばれる定数です。
実は、VBAのコード補完機能(入力補完ポップアップ)は、AutoCADのライブラリが正しく参照されていれば、`acDXF` と打つだけで `acDXF12` や `ac2018DXF` などの候補を自動で出してくれます。この補完が見えたら、正しくAPIと対話できている証拠です。
—
5. 陥りやすいエラーと回避の心得
最後に、現場でよくあるトラブルと、そのスマートな回避法をお伝えします。
- エラー:「パスが見つかりません」と言われる
- 原因: まだ一度も保存されていない新規図面(Drawing1.dwgなど)の場合、`doc.Path` が空っぽ(長さ0の文字列)になります。
- 対策: コード内に入れている `If doc.Path = “” Then` のチェックが、この事故を未然に防いでくれます。実務ではこういう「前提条件のチェック」がプロのコードの証です。
- ファイルが上書きされて元のDWGが消えないか心配?
- 対策: 今回のコードでは、元ファイル名に `_R12.dxf` というサフィックス(接尾辞)を意図的に付与しています。これにより、オリジナルである大切なDWGファイルを傷つけることなく、安全にDXFだけをパブリッシュ(出力)できます。
—
まとめ
いかがでしょうか?
「図面をR12形式のDXFで保存する」という一見地味な作業も、AutoCAD VBAをマスターすれば、ボタン一つで、何枚の図面であっても一瞬で処理できるようになります。
「マクロの記録」の枠を飛び出し、こうしたAPIの引数(`acDXF12`)を自分の意志で操れるようになったあなたは、もう立派な業務自動化エンジニアです。
この知見を武器に、日々の退屈なルーティンワークをサクッと自動化し、クリエイティブな設計業務に時間を注いでくださいね。それでは、次のステップでお会いしましょう!
