【実務・中級編】【初心者向け】AcadDocument.NameとFullName、Pathの使い分け:ファイル保存・管理で混乱しないための基礎知識 – AutoCAD VBA解析バイブル

スポンサーリンク

AutoCAD VBAの深淵:ファイルパスを制する者は、自動化の混乱を制する

AutoCADの自動化ツールを開発していると、必ず突き当たる壁がある。「ファイル情報の取り扱い」だ。
初心者ほど、`ThisDrawing.Name` を使って痛い目を見る。そして、なぜか「保存されていない図面」や「ネットワークドライブ上の複雑な階層」でツールがクラッシュする。

私はこれまで、何百もの自動化ツールを見てきたが、「ファイルパスの扱いが雑なコード」は、例外なく将来的に技術的負債となる。

今日は、`AcadDocument`オブジェクトが持つ3つのプロパティを、プロフェッショナルとしてどう使い分けるべきか、その極意を伝授する。

1. 3つのプロパティ:その正体と「罠」

まず、以下の3つのプロパティを正確に暗唱できるだろうか。

  • `Name`: ファイル名(例: `Layout_A.dwg`)
  • `Path`: フォルダパス(例: `C:\Project\2023\Design`)
  • `FullName`: フルパス(例: `C:\Project\2023\Design\Layout_A.dwg`)

なぜ `Name` だけでは危険なのか?

「ファイル名さえ分かれば良い」というコードは、「同じ名前のファイルが別のフォルダに存在する場合」に破綻する。 ログ出力やデータベース連携において、ファイル名だけをキーにすると、必ずと言っていいほど「どの図面を指しているのか分からない」という致命的なバグを生む。

なぜ「保存前」の図面を考慮しなければならないのか?

新規作成した直後の図面は、`Path` が空文字(`””`)を返す。この状態で `FullName` を結合させようとすると、パスが壊れる。堅牢なツールを作るには、「未保存状態」をいかに検知し、安全にハンドリングするかが分かれ道となる。

2. 実践的プログラミング:堅牢なファイル情報取得パターン

現場でそのまま使える、エラーを未然に防ぐための設計パターンを紹介する。これを「標準テンプレート」として採用してほしい。

‘ ———————————————————
‘ 堅牢なファイル情報取得関数
‘ 設計思想: 未保存状態を検知し、安全にパスを返す
‘ ———————————————————
Public Function GetSafeFilePath(doc As AcadDocument) As String
‘ Pathプロパティが空文字かどうかで、保存されているかを判定
If doc.Path = “” Then
‘ 未保存の場合は、一意の識別ができないため例外処理を想定
GetSafeFilePath = “UNSAVED_FILE_” & doc.Name
Else
‘ フルパスを返す(これが最も確実な識別子)
GetSafeFilePath = doc.FullName
End If
End Function

‘ ———————————————————
‘ ログ出力やバックアップで活用するデモコード
‘ ———————————————————
Public Sub ExportDrawingInfo()
Dim doc As AcadDocument
Set doc = ThisDrawing

Dim fullPath As String
fullPath = GetSafeFilePath(doc)

‘ ログファイルに出力する場合の例
Dim logMsg As String
logMsg = Now & ” | 処理対象: ” & fullPath

‘ コンソールへの出力(デバッグ用)
Debug.Print logMsg

‘ 【重要】パスを操作する際は、必ず末尾の \ を考慮せよ
‘ フォルダパスを取得し、バックアップフォルダを作成する例
Dim folderPath As String
If doc.Path <> “” Then
folderPath = doc.Path & “\Backup\”
‘ Dir関数でフォルダ存在確認(Dirは非常に優秀なAPI)
If Dir(folderPath, vbDirectory) = “” Then
MkDir folderPath
End If
End If
End Sub

3. プロの視点:ファイル管理で守るべき3つの鉄則

① 識別子には常に「FullName」を使う

データベースやCSVにログを書き出す際は、必ず `FullName` をキーにすること。`Name` はあくまで「表示用」の文字列に過ぎない。

② パス結合は「手動連結」を避ける

`Path & “\” & Name` という書き方は、すでに `Path` の末尾に `\` が含まれている場合(ルートディレクトリなど)に二重スラッシュを生む。可能な限り、ファイルシステムを扱うための専用関数や、パスの末尾を正規化するロジックを挟むこと。

③ ネットワークドライブの「UNCパス」を意識せよ

`\\Server\Shared\Project` のようなUNCパスで運用される環境では、`Path` プロパティの挙動が不安定になることがある。ファイル操作を行う際は、`FileSystemObject (FSO)` を活用し、`GetAbsolutePathName` メソッドでパスを正規化する癖をつけるのが、シニアエンジニアの流儀だ。

最後に:なぜ「基礎」にこだわるのか

AutoCAD VBAで最も恐ろしいのは、「動いているように見えるが、裏でデータが破壊されている」状態だ。間違ったパスを元にバックアップを作成し、本来の図面を上書きしてしまったら……その代償は計り知れない。

`AcadDocument` のプロパティを理解することは、AutoCADという巨大なアプリケーションのライフサイクルを理解することに等しい。

コードを書く前に、まず「そのオブジェクトが今、どのような状態にあるか」を想像せよ。それが、あなたのツールが「ただのスクリプト」から「業務を支える堅牢なシステム」へと昇華するための第一歩だ。

さあ、コードを書き換えよう。君のツールが、現場の信頼を勝ち取ることを期待している。

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