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)に貼り付けて、自分のフォルダで試してみてください。エラーが出たら、それはシステムがあなたに「もっと知れ」と語りかけているサインです。
何か分からないことがあれば、いつでもまた聞きに来てくださいね。あなたの自動化エンジニアとしての旅を、心から応援しています!
