【入門編】【実務中級者向け】「SaveAs」時のDWGバージョン定数一覧と、社内標準バージョンへの強制統一マクロ – AutoCAD VBA解析バイブル

スポンサーリンク
スポンサーリンク

AutoCAD VBAを掌握する極限の知見:図面バージョンを「強制統一」する設計思想

「あ、この図面、バージョンが新しすぎて開けない……」
「社内標準は2013形式なのに、クライアントから送られてきたのは最新の2018形式だ……」

AutoCADの実務現場で、エンジニアが一度は直面するこの「バージョンの壁」。これを手作業で「名前を付けて保存」して回る時間は、エンジニアにとって最も価値のない時間の一つです。

こんにちは。今日は、マクロの記録(レコーディング)という「点」の知識から脱却し、業務プロセスを自動化する「線」の設計へとステップアップするための、非常に実践的な技術をお話ししましょう。

今回のテーマは、`SaveAs`メソッドを用いた「DWGバージョンの強制コントロール」です。

1. なぜ「マクロの記録」では足りないのか?

多くの初学者は、まず「マクロの記録」を使います。「名前を付けて保存」を選び、バージョンを選んで保存する……。記録されたコードを見ると、確かに`SaveAs`という命令が出てきます。

しかし、記録されたコードは「その時、そのファイル名」に対してしか機能しません。
「開いたファイルが何であれ、常に社内標準の2013形式で、特定のフォルダに保存する」といった動的な判断は、記録されたコードには書けないのです。

これを実現するには、AutoCADが内部で持っている「定数(Constants)」と、ファイルのプロパティを操作する「ロジック」を理解する必要があります。

2. 武器となる知識:DWGバージョン定数の一覧

AutoCAD VBAでファイルを保存する際、`SaveAs`メソッドには「どの形式で保存するか」を指定する引数が必要です。この引数に渡すのが、以下の定数です。

これを知っているだけで、あなたのコードの自由度は飛躍的に高まります。

定数名 対応するAutoCADバージョン(形式) 実務上の位置付け
`acR2018` AutoCAD 2018 形式 最新に近い標準。拡張性は高い。
`acR2013` AutoCAD 2013 形式 多くの企業で「標準」とされる安定版。
`acR2010` AutoCAD 2010 形式 レガシー環境への互換性重視。
`acR2007` AutoCAD 2007 形式 かなり古いシステムとの連携用。
`acR2004` AutoCAD 2004 形式 ほぼメンテナンスモード。

> プロの視点:
> 実務では、あえて「新しすぎないバージョン(例:2013形式)」を標準に設定することが多いです。これは、古いバージョンのAutoCADを使用している協力会社や、古いデータ管理システムとのトラブルを未然に防ぐための、エンジニアとしての「配慮」なのです。

3. 実装:社内標準バージョンへの強制統一マクロ

では、実際に使えるコードを書いていきましょう。
単に保存するだけでなく、「元のファイルを壊さないように、新しい名前で保存する」という、実務で最も重要な安全設計を取り入れたコードです。

Option Explicit

''' <summary>
''' 現在の図面を、社内標準のAutoCAD 2013形式として別名保存するマクロ
''' </summary>
Sub ForceStandardVersionSave()
    Dim doc As AcadDocument
    Set doc = ThisDrawing ' 現在開いている図面オブジェクトを取得
    
    Dim originalPath As String
    Dim newPath As String
    Dim fileName As String
    Dim fileExt As String
    Dim folderPath As String
    
    ' 1. エラーハンドリング: 図面が一度も保存されていない(パスがない)場合は終了
    On Error GoTo ErrorHandler
    If doc.Path = "" Then
        MsgBox "この図面はまだ保存されていません。一度手動で保存してください。", vbExclamation
        Exit Sub
    End If
    
    ' 2. パス情報の分解
    ' 例: "C:\Project\Drawing1.dwg" -> folder="C:\Project\", name="Drawing1", ext=".dwg"
    originalPath = doc.FullName
    folderPath = doc.Path & "\"
    
    ' ファイル名と拡張子を分離(簡易的な実装)
    fileName = Mid(originalPath, InStrRev(originalPath, "\") + 1)
    fileExt = Mid(fileName, InStrRev(fileName, "."))
    fileName = Left(fileName, InStrLen(fileName) - Len(fileExt))
    
    ' 3. 新しいファイル名の生成
    ' 元のファイル名に "_STD" を付与して、標準バージョンであることを明示する
    newPath = folderPath & fileName & "_STD" & fileExt
    
    ' 4. 保存実行 (ここが核心部)
    ' FileFormat引数に acR2013 を指定することで、強制的に2013形式へ変換
    Debug.Print "Saving to: " & newPath
    doc.SaveAs Filename:=newPath, FileFormat:=acR2013
    
    MsgBox "社内標準形式(2013)での保存が完了しました!" & vbCrLf & _
           "保存先: " & newPath, vbInformation, "完了"
    
    Exit Sub

ErrorHandler:
    MsgBox "エラーが発生しました。" & vbCrLf & _
           "エラー番号: " & Err.Number & vbCrLf & _
           "内容: " & Err.Description, vbCritical, "実行エラー"
End Sub

コードの解説:ここが「プロ」の仕事です

1. `On Error GoTo ErrorHandler`:
実務用のツールにおいて、エラー対策をしないのは「ブレーキのない車」を運転するようなものです。ファイルが読み取り専用だった場合や、書き込み権限がない場合に、AutoCADがクラッシュするのを防ぎます。
2. `doc.Path` のチェック:
新規作成したばかりの「図面1.dwg」には保存先パスが存在しません。ここで判定を入れないと、`SaveAs`を実行した瞬間にエラーで止まってしまいます。
3. `acR2013` の指定:
ここが今回の主役です。この定数を渡すだけで、AutoCADの内部エンジンがデータの構造を古い形式へと再構築してくれます。
4. ファイル名の工夫 (`_STD`):
元のファイルを上書きしてしまうと、万が一の際に元に戻せません。`_STD`(Standardの略)などの接尾辞をつけることで、「これは標準化済みのファイルだ」と一目でわかるようにするのが、現場を混乱させないコツです。

4. 陥りやすい罠:オブジェクトのライフサイクル

ここで、一つだけ高度なアドバイスをさせてください。

`SaveAs`を実行すると、AutoCAD内での「現在の図面(`ThisDrawing`)」の状態が変わります。
もし、このマクロの後にさらに複雑な処理(例えば、大量の図面を連続して処理するループ処理)を続けたい場合、「今操作しているオブジェクトが、保存前のものか、保存後のものか」を常に意識しなければなりません。

大規模な自動化ツールを作る際は、`SaveAs`を実行した直後に、一度オブジェクト変数を再取得するか、あるいは「保存」と「編集」のフェーズを明確に分ける設計にしてください。これが、メモリリークや予期せぬ動作を防ぐ、アーキテクトの思考法です。

最後に

「マクロの記録」は、いわば「単語」を覚える段階です。
そして今回学んだ「定数」と「ロジック」の組み合わせは、「文章」を作る段階への入り口です。

単なる作業の自動化ではなく、「ミスが起きない仕組み」を作ること。それが、プロフェッショナルなエンジニアが目指すべきゴールです。

ここをクリアすれば、AutoCAD VBAの基礎はバッチリですよ。
さあ、次はもっと複雑な、図面間のデータ連携に挑戦してみましょう!

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