【入門編】【初心者向け】ThisDrawing.FullNameから「バックアップ用ファイル名」を自動生成して保存する方法 – AutoCAD VBA解析バイブル

スポンサーリンク

こんにちは。AutoCADの自動化という深淵な世界へようこそ。

「マクロの記録」ボタンを押すだけの日常に別れを告げ、自分の手で図面を操るエンジニアの領域へ足を踏み入れたあなたを、心から歓迎します。

今日は、現場で最も重宝される「図面の自動バックアップ保存」の極意を伝授しましょう。「今の図面を、日付付きで別名保存したい」。このシンプルな欲求をコードに落とし込むことは、AutoCAD APIの基礎であり、同時に「ファイルシステムの深淵」を覗く第一歩でもあります。

さあ、恐れることはありません。一つひとつ、紐解いていきましょう。

—

1. なぜ「FullName」にこだわるのか?

AutoCADのVBAで最も重要なオブジェクト、それは`ThisDrawing`です。この中には現在開いている図面の魂(メタデータ)が全て詰まっています。

中でも`FullName`は、「フルパス(フォルダの場所)+ファイル名」を文字列として保持する、いわば図面の住所証明書です。これさえあれば、保存場所の指定も、ファイル名の加工も自由自在。

まずは、ここを起点に思考する癖をつけてください。

2. 実践:バックアップ保存マクロ

以下のコードは、現在開いている図面のパスを取得し、末尾に「_Backup_202XMMDD」を付与して保存するものです。

Sub SaveBackupCopy()
Dim doc As AcadDocument
Dim fullName As String
Dim folderPath As String
Dim fileName As String
Dim fileExt As String
Dim backupName As String

‘ 現在アクティブな図面オブジェクトを取得
Set doc = ThisDrawing

‘ 未保存の図面(Drawing1.dwgなど)はパスを持たないため、ここでガードをかける
If doc.Path = “” Then
MsgBox “この図面はまだ一度も保存されていません!一度保存してから実行してください。”, vbCritical
Exit Sub
End If

‘ フルパスから分解する
fullName = doc.FullName
folderPath = Left(fullName, InStrRev(fullName, “\”)) ‘ フォルダパスを抽出
fileName = Mid(fullName, InStrRev(fullName, “\”) + 1, InStrRev(fullName, “.”) – InStrRev(fullName, “\”) – 1)
fileExt = Right(fullName, Len(fullName) – InStrRev(fullName, “.”) + 1)

‘ 日付文字列を作成(例: _20231027)
Dim dateStr As String
dateStr = Format(Date, “_yyyymmdd”)

‘ 保存先のフルパスを生成
backupName = folderPath & fileName & “_Backup” & dateStr & fileExt

‘ 別名で保存(acNativeは現在のバージョンで保存するという意味)
On Error Resume Next ‘ 万が一の書込み禁止エラー対策
doc.SaveAs backupName, acNative

If Err.Number = 0 Then
MsgBox “バックアップ完了:” & vbCrLf & backupName, vbInformation
Else
MsgBox “保存に失敗しました。ファイルが使用中ではありませんか?”, vbCritical
End If
On Error GoTo 0
End Sub

3. コードの「急所」を解説する

このコードが「ただのコピペ」で終わらないよう、エンジニアとしての視点を共有します。

  • `InStrRev` 関数が心臓部:

文字列を右から検索する関数です。`\`(パス区切り)を右から探すことで、ファイル名の開始位置を特定します。これを使わずに「力技」でパスを分割しようとすると、必ずバグの温床になります。

  • 未保存図面へのガード:

初心者が一番最初に踏む地雷がこれです。`doc.Path` が空の図面に対して処理を行うと、システムがパニックを起こします。必ず「保存されているか?」を確認するロジックを先頭に入れること。これがプロの流儀です。

  • `acNative` の意義:

`SaveAs` メソッドの第2引数。これを指定することで、現在のAutoCADが使用している形式(DWGバージョン)を維持したまま保存できます。余計なバージョン変換によるデータ破損を防ぐための防波堤です。

4. 陥りやすいエラーとその対策

  • 「ファイルが使用中です」エラー:

バックアップ先と同一の場所に、既に同名のファイルがある場合などに発生します。`On Error Resume Next` でエラーを握りつぶすだけでなく、実務では `Dir()` 関数を使って「既にファイルが存在しないか?」を事前にチェックするロジックを加えると、より堅牢になります。

  • パスの文字数制限:

Windowsにはパスの長さ制限(260文字)があります。深い階層で作業している場合、バックアップ名が長すぎてエラーになることがあります。エラーハンドリングを丁寧に行うことが、システムの安定稼働への近道です。

最後に:自動化の先にあるもの

このマクロを習得したあなたは、もう「手作業で保存ボタンを押す」という単純作業から解放されました。

次は、これを「図面を閉じるたびに自動実行する(イベントプロシージャ)」ように改造してみるのはどうでしょう? AutoCADのAPIは、あなたが望む限り、どこまでも自動化の海を広げてくれます。

迷ったときは、いつでも戻ってきてください。私たちは、図面という名のキャンバスをコードで塗り替える、同じエンジニアなのですから。

それでは、素晴らしい自動化ライフを!

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