ようこそ。AutoCADの自動化という深淵なる世界へ。
「マクロの記録」という安全な岸辺を離れ、いよいよVBAの荒波へ漕ぎ出す君たちへ、伝説的な自動化エンジニアとして一つだけ伝授したいことがある。
それは、「コードを書くことは、PCに仕事を委ねるのではなく、PCに『意思』を伝えることだ」ということだ。
今回は、実務で死ぬほど繰り返される「DXFをDWGに変換する」という単純作業を、FSO(FileSystemObject)を使って一瞬で終わらせるための極意を伝授しよう。
—
1. なぜ「FSO(FileSystemObject)」を使うのか?
VBA標準の`Dir`関数でもファイル操作はできるが、現場で使うなら迷わず`FileSystemObject`だ。理由は単純。堅牢性(ロバストネス)が段違いだからだ。
FSOはフォルダやファイルのパスをオブジェクトとして扱う。これにより、「ファイルがあるかどうか」「フォルダが作成されているか」といった判定が直感的になり、エラーでプログラムが突然死するリスクを劇的に下げることができる。
—
2. DXF一括変換ワークフローの全貌
今回構築する自動化の骨格は以下の3ステップだ。
1. 走査: 指定フォルダ内の`.dxf`を漏らさず捕まえる。
2. 変換: AutoCADで開き、`SaveAs`メソッドで最新のDWG形式として書き出す。
3. 整理: 変換し終えたDXFを「処理済み」フォルダへ隔離する(ここが重要だ。同じファイルを二度処理しないための鉄則である)。
実装コード
このコードを標準モジュールに貼り付けてほしい。
Option Explicit
Sub BatchDXFToDWG()
Dim fso As Object
Dim targetFolder As Object, processedFolder As Object
Dim file As Object
Dim doc As AcadDocument
Dim folderPath As String
‘ 1. オブジェクトの生成
Set fso = CreateObject(“Scripting.FileSystemObject”)
folderPath = “C:\CAD_Work\DXF_Input\” ‘ 変換したいDXFがある場所
Set targetFolder = fso.GetFolder(folderPath)
‘ 「処理済み」フォルダがなければ作成する(安全装置)
If Not fso.FolderExists(folderPath & “Processed”) Then
fso.CreateFolder (folderPath & “Processed”)
End If
Set processedFolder = fso.GetFolder(folderPath & “Processed”)
‘ 2. ファイルを一つずつ処理
For Each file In targetFolder.Files
If LCase(fso.GetExtensionName(file.Name)) = “dxf” Then
‘ DXFを開く
Set doc = Documents.Open(file.Path)
‘ DWGとして保存 (ac2018_dwgを指定)
‘ ※ac2018_dwgはAutoCAD 2018形式の保存定数
doc.SaveAs fso.BuildPath(folderPath, fso.GetBaseName(file.Name) & “.dwg”), ac2018_dwg
‘ ドキュメントを閉じる
doc.Close
‘ 3. 元ファイルを移動(処理済みへ)
fso.MoveFile file.Path, fso.BuildPath(processedFolder.Path, file.Name)
Debug.Print “変換完了: ” & file.Name
End If
Next file
MsgBox “全ての変換作業が完了しました。”, vbInformation
End Sub
—
3. このコードを「使いこなす」ための知見
① `SaveAs`のバージョン指定に注意せよ
`doc.SaveAs`の第二引数には、保存するバージョンを指定できる。`ac2018_dwg`は汎用性が高いが、取引先や社内ルールに合わせて適宜変更してくれ。ここを間違えると、最新版のCADでしか開けないファイルを作り、翌朝泣くことになる。
② エラーハンドリングの重要性
上記のコードは「最短距離」を走るものだ。実際の現場では、「DXFが読み取り専用で開いている」「図面が破損している」といった事態が必ず起きる。
`On Error Resume Next`を適材適所で使い、エラーが発生したファイル名をログに出力するような仕組みを後から追加するだけで、君のツールは「おもちゃ」から「業務インフラ」へと進化する。
③ なぜ「移動」させるのか?
多くの初心者は、変換後にファイルをそのまま残して「変換済み」かどうかをファイル名で判定しようとする。これはバグの温床だ。
「未処理はフォルダに置かない」というステートフルな運用を徹底すること。これが、大規模な自動化を成功させるためのエンジニアの矜持だ。
—
最後に:エンジニアとしての第一歩
このコードを動かした瞬間、君は「作業者」から「自動化の設計者」へと脱皮する。
AutoCAD VBAは古臭いと言われることもあるが、APIの深淵さは他の言語にはない魅力がある。
まずはこのコードをコピー&ペーストして、自分のPCで動かしてみること。それが、退屈なルーチンワークから君を解放する最初の一歩だ。
何か詰まったら、いつでも戻ってきなさい。君の挑戦を応援している。
