AutoCAD VBAの「住所」を支配せよ:Name, FullName, Pathの迷宮を脱出する
こんにちは。AutoCADの自動化の世界へようこそ。
VBAを学び始めると、誰もが一度は「ファイル名を取得したいだけなのに、どれを使えばいいの?」という壁にぶつかります。
`Name`、`FullName`、`Path`。これらは単なる文字列ではありません。AutoCADという巨大なシステムが管理している「図面の住所」を特定するための重要なキーです。ここを曖昧にしたままツールを作ると、あとで「保存先が見つからない」「ログが予期せぬ場所に生成された」という悪夢を見ることになります。
今日は、伝説的な自動化エンジニアの視点から、この3つの使い分けを完璧にマスターしましょう。
—
1. 3つのプロパティを「家」に例えて理解する
まずは、この関係性を直感的に理解しましょう。あなたの手元にある図面ファイルを「一軒家」だと想像してください。
- `Name`(名前): 「山田家」
- ファイル名だけ。誰がどこに住んでいるかという情報は持っていません。
- `Path`(経路/フォルダパス): 「東京都千代田区〜」
- その家がどこにあるかを示す住所。家そのものの名前は含みません。
- `FullName`(完全名): 「東京都千代田区〜にある山田家」
- 住所と名前を結合した、世界に一つだけの完全な識別子です。
これをAutoCADのオブジェクトモデルで確認するとこうなります。
| プロパティ | 内容 | 用途の例 |
| :— | :— | :— |
| Name | `Sample.dwg` | 画面表示、ファイル名のみのリスト作成 |
| Path | `C:\Projects\Design` | ログ出力先の指定、バックアップフォルダの選定 |
| FullName | `C:\Projects\Design\Sample.dwg` | ファイルのオープン、保存、外部参照の管理 |
—
2. 実践コード:情報を抽出してログに書き出す
それでは、現在の図面からこれらの情報を正しく抽出するコードを見てみましょう。このコードは、自動化ツールの「基本の型」になります。
Sub GetDocumentInfo()
‘ 現在アクティブな図面を取得
Dim doc As AcadDocument
Set doc = ThisDrawing
‘ 情報を取得してイミディエイトウィンドウに出力
Debug.Print “— 図面情報 —”
Debug.Print “ファイル名: ” & doc.Name
Debug.Print “フォルダパス: ” & doc.Path
Debug.Print “フルパス: ” & doc.FullName
‘ 【重要】未保存の図面に対する注意
‘ 新規作成したばかりで一度も保存していない場合、Pathは空文字(“”)になります。
If doc.Path = “” Then
MsgBox “この図面はまだ保存されていません!”, vbExclamation
End If
End Sub
開発者からのワンポイントアドバイス
特に注意すべきは「未保存の状態」です。`doc.Path` が空文字であることをチェックせずにファイルパスを結合して処理しようとすると、プログラムは必ずエラーを吐きます。実務で堅牢なツールを作るなら、必ず `If doc.Path = “” Then …` のような安全策を組み込んでください。
—
3. なぜ「使い分け」が重要なのか?
「全部 `FullName` を使えばいいのでは?」と思うかもしれません。しかし、それはプロの仕事ではありません。
シナリオ:自動バックアップ機能を作る場合
例えば、図面と同じフォルダに「Backup」というフォルダを作り、そこに保存したいとします。
- 悪い設計: フルパスを文字列操作(SplitやInStr)で強引に切り出す。
- → パスの区切り文字(\)の扱いでバグが発生しやすい。
- 良い設計: `doc.Path` を取得し、それに `”\Backup”` を結合する。
- → `Path` は純粋なフォルダ情報なので、結合するだけで安全なパスが生成できる。
シナリオ:ログ出力を行う場合
- ログファイルには「どのファイルに対する操作か」を記録します。
- 同じ名前のファイルが別のフォルダにある可能性を考慮し、ログには必ず `FullName` を記録するのが鉄則です。
—
4. 初心者が陥りやすい「罠」
最後に、初心者が最もハマりやすい落とし穴を共有します。
1. パスの末尾にある `\` (円記号) の有無
- `doc.Path` には、末尾に `\` は含まれません。そのため、自分でパスを結合する際は必ず `doc.Path & “\” & “myLog.txt”` のように記述する必要があります。
2. `ThisDrawing` への依存
- 複雑なツールを作ると、複数の図面を操作することになります。その際 `ThisDrawing` を使うと「今どれがアクティブか」に左右されてしまいます。`AcadApplication.Documents` コレクションからドキュメントを明示的に取得する癖をつけましょう。
—
まとめ:ここをクリアすれば、あなたはもう脱・初心者
`Name`、`Path`、`FullName` の使い分けは、AutoCAD VBAという巨大な海を航海するための「コンパス」です。
- 表示・識別には `Name`
- 場所の特定には `Path`
- システム的な操作には `FullName`
この3つの役割さえ頭に入っていれば、どんなに複雑な自動化ツールを作っても道に迷うことはありません。
さあ、コードエディタを開いて、まずは自分の開いている図面のパスを取得してみましょう。その一歩が、あなたのエンジニアとしてのキャリアを大きく変えるはずです。何か分からないことがあれば、いつでもまた聞きに来てくださいね。応援しています!
