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

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

DWGバージョンの罠を回避せよ:社内標準への強制統一を実現する堅牢なアーキテクチャ設計

業務自動化の現場で、中級者が陥る最も「痛い」ミスの一つがある。それは、「AutoCADのバージョン」と「DWGファイルの保存形式(バージョン)」を混同することだ。

「最新のAutoCAD 2024を使っているから、保存したファイルは最新形式だ」という思い込み。これが、協力会社や古いバージョンのAutoCADを使用する他部署との間で、ファイルが開けない、あるいはデータが欠落するといった、プロジェクトを停滞させる致命的なトラブルを引き起こす。

本記事では、単なる「SaveAs」の書き方ではない。設計思想としての「バージョン管理」と、実務で即戦力となる「強制統一マクロ」の極致を伝授する。

1. 概念の再定義:AutoCADのバージョン vs DWG形式

まず、エンジニアとしてこの違いを脳に刻んでほしい。

  • AutoCAD Application Version: あなたが起動しているソフトウェアのバージョン(例: 2024)。
  • DWG File Format Version: ファイル自体が保持しているデータ構造のバージョン(例: acR2018)。

AutoCAD 2024で作業していても、保存形式を `acR2013` に指定すれば、そのファイルは AutoCAD 2013 形式としてシリアライズされる。この「変換」のプロセスは、単なるファイル名の変更ではなく、データベース構造の再構築である。ここを理解していないコードは、パフォーマンスの低下や予期せぬエラーを招く。

実務で扱うべきDWG形式定数一覧

`SaveAs` メソッドで使用する `dwgformat` 引数は、以下の定数で制御される。これらを「マジックナンバー」として直接コードに書くのは素人のすることだ。必ず列挙型(Enum)や定数として定義し、可読性を確保せよ。

定数名 DWG形式名 対応するAutoCAD世代の目安
`acR2018` AutoCAD 2018形式 AutoCAD 2018以降(現在のデファクト)
`acR2013` AutoCAD 2013形式 AutoCAD 2013 – 2017
`acR2010` AutoCAD 2010形式 AutoCAD 2010 – 2012
`acR2007` AutoCAD 2007形式 AutoCAD 2007 – 2009
`acR2000` AutoCAD 2000形式 AutoCAD 2000 – 2006

2. 堅牢な設計:プロフェッショナルのための3つの原則

自動化ツールを「ただ動くもの」から「プロダクション品質」へ昇華させるには、以下の設計原則が必要だ。

① 冪等性(Idempotency)の確保

「既にターゲットのバージョンで保存されている場合、何もしない」という設計にせよ。何度も `SaveAs` を実行して、無駄なファイル書き込みやファイルロックの発生を防ぐことは、システム全体の安定性に直結する。

② エラーハンドリングの階層化

ファイルが「読み取り専用」ではないか? 「他のユーザーが開いていないか?」 「保存先ディレクトリに書き込み権限はあるか?」 これらのチェックを怠るマクロは、現場で「使い物にならない」と切り捨てられる。

③ 設定の外部化(Hard-codingの排除)

「社内標準バージョン」は、数年単位で変わる。VBAのコード内に `acR2013` と直接書き込む設計は、保守性の観点から「悪」だ。将来的に、ExcelやINIファイルから設定を読み込める構造にしておくのが、チーフアーキテクトの流儀である。

3. 実装例:社内標準バージョン強制統一モジュール

以下に、実務に投入可能なレベルのVBAコードを示す。このコードは、現在のファイル形式をチェックし、必要であれば指定された形式で「別名保存」を行う。

Option Explicit

' =================================================================
' Module: StandardVersionManager
' Description: 図面を社内標準のDWG形式へ強制統一するプロフェッショナル・ツール
' Author: Lead Automation Architect
' =================================================================

' 社内標準のバージョンを定義(将来的に外部ファイルから読み込む設計を推奨)
' ここでは例として AutoCAD 2013 形式 (acR2013) を標準とする
Private Const TARGET_DWG_FORMAT As Integer = acR2013

''' <summary>
''' 現在の図面が社内標準形式であるかを確認し、異なる場合は保存を実行する
''' </summary>
Public Sub EnforceStandardVersion()
    Dim doc As AcadDocument
    Set doc = ThisDrawing
    
    On Error GoTo ErrorHandler
    
    ' 1. 読み取り専用チェック
    If doc.ReadOnly Then
        MsgBox "エラー: ファイルが読み取り専用です。書き込み権限を確認してください。", vbCritical, "実行不能"
        Exit Sub
    End If
    
    ' 2. 現在のファイル形式を取得
    ' 注意: dwgformatプロパティは、現在のファイルの保存形式を返す
    Dim currentFormat As Integer
    currentFormat = doc.dwgformat
    
    ' 3. 冪等性のチェック(既に標準形式なら終了)
    If currentFormat = TARGET_DWG_FORMAT Then
        Debug.Print "Info: すでに社内標準形式です。処理をスキップします。"
        Exit Sub
    End If
    
    ' 4. 保存処理の実行
    ' 保存先パスの生成(ここでは元のファイル名に "_Standard" を付与する設計)
    ' ※実務では上書き保存するか、別名保存するかをポリシーに基づいて決定せよ
    Dim newFilePath As String
    newFilePath = GetStandardFilePath(doc.FullName)
    
    Debug.Print "Info: バージョン変換を実行中... " & currentFormat & " -> " & TARGET_DWG_FORMAT
    
    ' SaveAsの実行
    ' 引数: (FileName, dwgformat)
    doc.SaveAs newFilePath, TARGET_DWG_FORMAT
    
    MsgBox "成功: 図面を社内標準形式で保存しました。" & vbCrLf & newFilePath, vbInformation, "完了"
    
    Exit Sub

ErrorHandler:
    Select Case Err.Number
        Case -2147352567 ' 実行時エラー: ファイルアクセス拒否など
            MsgBox "エラー: ファイルへのアクセスが拒否されました。他のユーザーが使用中ではないか確認してください。", vbCritical, "アクセスエラー"
        Case Else
            MsgBox "予期せぬエラーが発生しました: " & Err.Description, vbCritical, "システムエラー"
    End Select
End Sub

''' <summary>
''' 新しい保存パスを生成する(ロジックの分離)
''' </summary>
Private Function GetStandardFilePath(ByVal originalPath As String) As String
    ' 実務上の設計:元のファイル名.dwg -> 元のファイル名_Standard.dwg
    ' 運用ルールに合わせて、上書き(originalPath)にするか検討すること
    Dim pathParts() As String
    Dim baseName As String
    Dim extension As String
    Dim dotPos As Integer
    
    dotPos = InStrRev(originalPath, ".")
    If dotPos > 0 Then
        baseName = Left(originalPath, dotPos - 1)
        extension = Mid(originalPath, dotPos)
        GetStandardFilePath = baseName & "_Standard" & extension
    Else
        GetStandardFilePath = originalPath & "_Standard"
    End If
End Function

4. 運用における高度な知見:データベース・連携の注意点

このマクロを大規模なプロジェクトに組み込む際、さらに一段上の設計レベルを求めるなら、以下の点に留意せよ。

ファイル管理DBとの同期

もし社内で図面管理システム(SQL ServerやAccess等)を運用している場合、`SaveAs` によってファイルパスが変わると、DB上のパス情報と不整合が起きる。

  • 対策: `SaveAs` 成功後に、新しいパスをDBに書き戻す、あるいは「元のファイル名で上書き(`doc.SaveAs doc.FullName, TARGET_DWG_FORMAT`)」する設計を徹底すること。

外部参照(Xref)への影響

バージョンを下げて保存した場合、その図面が「外部参照元」となっていると、参照先のバージョンとの互換性には問題ないが、逆に「参照される側」が極端に古い形式になると、最新版のAutoCADで開いた際にアタッチ時の挙動が変わるリスクがゼロではない。常に「図面ツリー全体のバージョン整合性」を意識せよ。

結論

AutoCAD VBAによる自動化の本質は、単に「操作を代行すること」ではない。「業務ルール(標準化)を、コードという形で強制・担保すること」にある。

今回紹介した「冪等性を備えた、エラーハンドリングの徹底されたバージョン制御」を実装することで、あなたの作るツールは、単なる「便利なスクリプト」から、企業の資産を守る「信頼されるシステム」へと進化する。

設計に妥協するな。それが、エンジニアとしての誇りだ。

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