AutoCAD VBAを極める:カスタムファイルダイアログで実現する「理想の図面管理」
こんにちは。AutoCADの自動化という深淵な世界へようこそ。
日々、何千もの図面を相手にしていると、「標準のファイル選択ダイアログでは非効率だ」と感じる瞬間が必ず訪れます。特定のフォルダから最新版だけをフィルタリングしたい、あるいは命名規則に従っていない図面を排除したい……そんな現場の切実な願いを叶えるのが、今回解説する「カスタムファイルダイアログ」の構築です。
マクロの記録から一歩先へ進み、AutoCADのエンジンを意のままに操るための「真の自動化」を一緒に学んでいきましょう。
—
1. なぜ「標準」では不十分なのか?
AutoCAD標準の `ThisDrawing.Application.FileDialog` は便利ですが、あくまで汎用的なツールです。プロフェッショナルな現場では、以下の制御が必要になります。
- バリデーション(妥当性検証): ファイルを開く前に、図面バージョンや属性情報(カスタムプロパティ)をチェックする。
- フィルタリング: 特定のプロジェクト名や日付が含まれるファイルのみを表示する。
- UXの最適化: ユーザーが余計な図面を開いてエラーを出すリスクをゼロにする。
これを実現するには、Windows API や UserForm を活用し、自分だけの「窓口」を作ることが近道です。
—
2. 実装の要:UserFormによるカスタムUI
まずはVBAエディタで `UserForm` を追加し、`ListBox` と `CommandButton` を配置してください。これがあなたの新しい「図面選択ウィンドウ」になります。
コードの核心部分
以下のコードは、指定フォルダ内のDWGファイルを抽出し、リストボックスに表示する実装例です。
‘ フォルダ内のDWGファイルを取得し、リストボックスへ格納するロジック
Public Sub LoadDwgFiles(folderPath As String, targetListBox As MSForms.ListBox)
Dim fileName As String
‘ FSO (FileSystemObject) を使うのがスマートです
Dim fso As Object
Set fso = CreateObject(“Scripting.FileSystemObject”)
‘ フォルダが存在するかチェック
If Not fso.FolderExists(folderPath) Then Exit Sub
targetListBox.Clear
fileName = Dir(folderPath & “\.dwg”)
Do While fileName <> “”
‘ ここで特定の命名規則に合致するものだけを追加するロジックを組む
‘ 例: “PROJ_” で始まるファイルのみ許可
If Left(fileName, 5) = “PROJ_” Then
targetListBox.AddItem fileName
End If
fileName = Dir
Loop
End Sub
—
3. 図面を開く際の「作法」と注意点
リストボックスで選択された図面を開く際、単に `Open` メソッドを呼ぶだけでは不十分です。以下の「プロの作法」を忘れないでください。
‘ 選択された図面を安全に開くためのメソッド
Public Sub OpenSelectedDrawing(fullPath As String)
Dim doc As AcadDocument
‘ オブジェクトモデルのライフサイクルを意識する
‘ 現在開いている図面と干渉しないよう、DocumentCollectionを操作する
On Error Resume Next
Set doc = ThisDrawing.Application.Documents.Open(fullPath)
If Err.Number <> 0 Then
MsgBox “エラー発生: 図面が開けませんでした。” & vbCrLf & Err.Description
Exit Sub
End If
‘ 開いた直後のアクティブ化と設定変更
doc.Activate
‘ 必要に応じて、ここで画層設定や単位設定を自動補正する
End Sub
ここがプロのポイント!
- `On Error Resume Next`: ファイルが読み取り専用で開かれている場合や、破損している場合にクラッシュするのを防ぎます。
- ライフサイクルの管理: `Documents.Open` はメモリを消費します。大量の図面を一括処理する場合は、処理の最後に必ず `doc.Close` を呼ぶことを忘れないでください。これを怠ると、AutoCADがメモリ不足でフリーズする原因になります。
—
4. 陥りやすいエラーと回避策
初心者が必ずぶつかる壁が「図面が開いている最中の割り込み」です。
1. DoEvents の活用:
ファイル検索や読み込みが重い処理になる場合、VBAが固まったように見えることがあります。ループの途中に `DoEvents` を入れることで、Windows OSに制御を戻し、アプリのフリーズを防げます。
2. フルパスの指定:
`Dir` 関数は便利ですが、ファイル名だけしか返しません。必ずフォルダパスと結合したフルパスを保持しておくことが、後のトラブル(別のフォルダの同名ファイルを掴んでしまう等)を防ぐ鍵です。
—
最後に:自動化は「あなたの時間を創る」こと
ここまで実装できれば、あなたのAutoCADライフは劇的に変わります。毎日行っていた「図面探し」と「ファイルオープン」の作業が、わずか数クリックの選別作業に圧縮されるのです。
今回のカスタムダイアログは、単なるツールではありません。「標準機能に縛られず、自分の業務をAutoCADに合わせさせる」という、エンジニアとしての第一歩です。
何か分からないことがあれば、またいつでも聞いてください。次回の記事では、このダイアログに「図面のバージョンを一括変換して保存する」という高度な機能を追加する方法を解説します。
それでは、素晴らしい自動化ライフを!
