【入門編】【初心者向け】図面を開かずにファイル名とパスを取得:Dir関数とThisDrawing.Pathの使い分け – AutoCAD VBA解析バイブル

スポンサーリンク

AutoCAD VBAで「図面情報の取得」を極める:Dir関数とThisDrawing.Pathの境界線

こんにちは。AutoCADの自動化の世界へようこそ。
「マクロの記録」ボタンを押すだけの世界から、自分の手でコードを書き、CADを自在に操る世界へ。その第一歩として、「図面がどこにあるのかを特定する」という基本にして至高のテクニックを解説します。

多くの初心者がここで躓くのが、「今開いている図面」と「フォルダに眠っている図面」の扱いの違いです。ここを整理すれば、あなたの自動化スキルは一気にプロの領域へ近づきますよ。

—

1. そもそも「場所」を特定するとはどういうことか?

AutoCAD VBAで扱う「ファイル名」や「パス」には、大きく分けて2つのアプローチがあります。

1. 現在アクティブな図面から情報を吸い出す(ThisDrawing)
2. フォルダの中を覗き見て、ファイルを探し出す(Dir関数)

これらを混同して使うと、「なぜかエラーが出る」「ファイルが見つからない」という泥沼にハマります。まずはこの2つの「立ち位置」を明確にしましょう。

—

2. 目の前の図面を操る:`ThisDrawing` の世界

`ThisDrawing` は、今まさにあなたのモニターに表示され、編集可能な状態にある「その図面そのもの」を指します。

  • 用途: 今開いている図面の名前を知りたい、保存場所を知りたいとき。
  • 特徴: AutoCADが既にメモリ上にロードしているため、アクセスが爆速です。

実践コード:現在の図面情報を取得する

Sub GetCurrentDrawingInfo()
‘ 現在アクティブな図面のフルパスを取得
Dim fullPath As String
fullPath = ThisDrawing.FullName

‘ ファイル名のみを取得
Dim fileName As String
fileName = ThisDrawing.Name

‘ パスのみを取得
Dim pathOnly As String
pathOnly = ThisDrawing.Path

MsgBox “フルパス: ” & fullPath & vbCrLf & _
“ファイル名: ” & fileName & vbCrLf & _
“フォルダ: ” & pathOnly
End Sub

ここがポイント:
`ThisDrawing.Path` を使う際は、その図面が一度も保存されていない(名前が「Drawing1.dwg」など)場合は空文字が返ってくることに注意してください。未保存の図面にパスは存在しません。これは初心者が必ず一度は踏む地雷です。

—

3. 閉じた図面を遠隔操作する:`Dir` 関数の世界

次に、AutoCADで開いていない、フォルダの中に眠っている図面たちを処理したい場合です。ここで `ThisDrawing` は使えません。`Dir` 関数という、Windowsのファイルシステムを直接叩くコマンドを使います。

  • 用途: 特定のフォルダにある全DWGファイルを一括処理したいとき。
  • 特徴: ファイルを「開かずに」名前だけを抽出できるため、パフォーマンスが非常に高いです。

実践コード:指定フォルダのDWGを列挙する

Sub ListFilesinFolder()
Dim folderPath As String
Dim fileName As String

‘ 検索したいフォルダを指定(最後に \ を忘れずに!)
folderPath = “C:\Projects\AutoCAD_Data\”

‘ Dir関数で最初のファイル名を取得
fileName = Dir(folderPath & “.dwg”)

‘ ファイルが見つかる限りループする
Do While fileName <> “”
Debug.Print “発見した図面: ” & fileName

‘ 次のファイルを取得
fileName = Dir()
Loop
End Sub

ここがプロの知見:
`Dir` 関数は「状態」を保持しています。最初に `Dir(パス)` を呼び出し、次に引数なしで `Dir()` を呼び出すことで、次のファイルへバトンを渡します。この「状態保持」の仕組みを理解しているかどうかが、中級者への分かれ道です。

—

4. 陥りやすいエラーと回避策

Q1: `ThisDrawing.Path` が空っぽでエラーになる!

対策: `If ThisDrawing.Path = “” Then` で条件分岐しましょう。「まだ保存されていない図面は処理対象外にする」というガード節をコードの冒頭に入れるのが、堅牢なプログラムの秘訣です。

Q2: ネットワークドライブ上のファイルが遅い!

対策: ネットワーク上のファイルをループで回す際、一つずつ `Open` して処理すると激重になります。まずは `Dir` でファイル名だけを配列に格納し、必要なものだけを選別してから処理する「2段階アプローチ」を徹底してください。

—

最後に:エンジニアへの一歩

今回解説した `ThisDrawing` と `Dir` の使い分けは、AutoCAD自動化の「呼吸」のようなものです。

  • 今開いている図面をいじるなら `ThisDrawing`
  • フォルダの中身を整理・検索するなら `Dir`

これさえ押さえておけば、図面ファイルを「迷子」にさせることはありません。
まずはこのコードをVBE(Visual Basic Editor)に貼り付けて、自分のフォルダで試してみてください。エラーが出たら、それはシステムがあなたに「もっと知れ」と語りかけているサインです。

何か分からないことがあれば、いつでもまた聞きに来てくださいね。あなたの自動化エンジニアとしての旅を、心から応援しています!

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