プロの現場で「なぜか相手先でファイルが開けない」「図面が壊れた」というトラブルを経験したことはありませんか?
AutoCAD VBAを操る上で、「図面を保存する」という行為は、単なるファイルの書き出しではなく、「相手の環境への翻訳」であると心得てください。
今日は、AutoCAD VBAで「取引先のバージョンに合わせて自動で保存形式を最適化する」という、実務の現場で最も重宝されるスキルを伝授します。マクロの記録から一歩踏み出し、プロの技術を身につけましょう。
—
なぜ「バージョン制御」が重要なのか?
AutoCADのDWG形式は、バージョンが上がるごとに新しいデータ構造(注釈尺度や高度なハッチング、注釈オブジェクトなど)を取り込みます。最新版(2025など)で保存したファイルを、古いCAD(2013など)で開こうとすれば、当然エラーが発生します。
手作業で「名前を付けて保存」からバージョンを選ぶのは、ヒューマンエラーの温床です。これをVBAで自動化すれば、「一度の設定で、二度と互換性トラブルを起こさない」堅牢な環境が構築できます。
—
実践コード:相手先環境に合わせた自動セーブ機能
以下のコードは、取引先ごとのバージョン情報を管理し、アクティブな図面をその形式で保存する関数です。
‘ ———————————————————
‘ 取引先環境に合わせてDWGを保存するプロシージャ
‘ ———————————————————
Public Sub SaveDrawingForClient(ClientName As String)
Dim doc As AcadDocument
Dim saveType As AcSaveAsType
Dim folderPath As String
Dim fileName As String
Set doc = ThisDrawing
folderPath = “C:\Output\ClientFiles\” ‘ 保存先パス
‘ 取引先ごとのバージョン設定を分岐
Select Case ClientName
Case “Alpha_Corp”: saveType = ac2013_dwg ‘ 古い環境
Case “Beta_Design”: saveType = ac2018_dwg ‘ 標準的な環境
Case Else: saveType = ac2018_dwg ‘ デフォルト
End Select
fileName = folderPath & doc.Name
‘ 保存処理:すでにファイルが存在する場合の上書きを想定
On Error Resume Next
doc.SaveAs fileName, saveType
If Err.Number <> 0 Then
MsgBox “保存に失敗しました。ファイルが読み取り専用になっていないか確認してください。”, vbCritical
Else
MsgBox ClientName & ” 用に ” & saveType & ” 形式で保存しました。”
End If
On Error GoTo 0
End Sub
コードの解説と「プロの視点」
1. `AcSaveAsType` の役割: これはAutoCADが内部的に持っている「保存形式のリスト」です。`ac2013_dwg` や `ac2018_dwg` と指定することで、コードが明確にバージョンを制御します。
2. `On Error Resume Next`: ファイルの保存は、ネットワークの遅延や権限問題で失敗することがあります。エラー時にいきなりデバッグ画面に行かせるのではなく、ユーザーに状況を伝える工夫が「安定したツール」の条件です。
3. フルパスの重要性: `SaveAs` メソッドを使うときは、必ずドライブレターから始まる「フルパス」を指定してください。相対パスに頼ると、AutoCADの作業ディレクトリ(カレントフォルダ)が変わった瞬間に意図しない場所へ保存される事故が起きます。
—
陥りやすい罠:ここだけは注意せよ
1. バージョンによるデータ欠損の理解
「下位互換」とは、単にファイルが開けるようにする魔法ではありません。例えば、最新の「マルチ引出線」機能を使って描いた図面を2007形式で保存すれば、そのオブジェクトはただの線や文字にバラされる(分解される)可能性があります。
「下位バージョンへ保存すると、一部の高度な機能が失われる可能性がある」ということを、利用者に必ず周知してください。
2. 「SaveAs」と「Save」の使い分け
- `SaveAs`: 別名保存や、保存形式を変えるときに使います。
- `Save`: 現在開いている図面を、そのままの形式で上書きします。
自動化ツールを作る際は、常に「どちらの意図で実行されているか」をコード内で明示的に分ける癖をつけましょう。
—
次のステップへ
ここまでマスターすれば、あなたはもう「マクロを記録する人」ではありません。「業務フローを設計するエンジニア」です。
次は、「複数の図面をまとめて特定バージョンに変換してフォルダに吐き出すバッチ処理」に挑戦してみてください。AutoCADの `ObjectDBX`(図面を開かずにバックグラウンドで処理する技術)を組み合わせれば、数千枚の図面変換も数分で完了します。
AutoCAD VBAの世界は奥深く、学べば学ぶほどあなたの業務時間は短縮されます。このコードをベースに、あなたの現場に最適なカスタマイズを加えてみてください。応援していますよ!
