こんにちは!AutoCAD VBAの世界へようこそ。
マクロの記録ボタンを押して「なんだか動いたぞ!」と感動したのも束の間、いざ自分でコードを書こうとすると、予期せぬ壁にぶつかって手が止まってしまう……。初学者の頃は、誰もがそんな経験をするものです。
今回は、AutoCAD VBAの実務において絶対に避けて通れない「超重要テクニック」を伝授します。
ここをクリアするだけで、あなたの書くマクロは「ただのおもちゃ」から「頼れる自動化ロボット」へと劇的に進化します。肩の力を抜いて、一緒に見ていきましょう!
—
1. なぜ、マクロは突然「フリーズ」するように止まるのか?
まずは、こんな状況を想像してください。
あなたは「開いている図面を別名で保存する」という自動化マクロを作りました。いざ実行!……すると、画面には以下のようなダイアログボックスがピコンと表示され、処理がそこでピタッと止まってしまった。
> 「ファイル名を入力してください」
……おいおい、こっちは自動で一気に処理を終わらせたいのに、これじゃあ人間が監視していなきゃいけないじゃないか!と、頭を抱えたくなりますよね。
実はこれ、AutoCADの仕様(優しさ)が原因です。
AutoCADは、ユーザーがうっかり大切なファイルを上書きしたり、変な名前で保存したりしないように、ファイル操作のメソッド(`Open`や俳優の`SaveAs`など)が実行されると、親切心から「確認のダイアログボックス」を画面に表示するようになっています。
しかし、私たちエンジニアにとって、この「親切な確認画面」は自動化の最大の邪魔者です。
—
2. 救世主:システム変数「FILEDIA(ファイルダイアログ)」とは?
この「勝手にダイアログが出て処理が止まる現象」を華麗に解決してくれるのが、AutoCADのシステム変数「FILEDIA(ファイルダイアログ)」です。
- `FILEDIA = 1` (初期値)
ファイル選択や保存のときにお馴染みの「ダイアログボックスを表示する」モード。人間の手で操作するときには非常に便利です。
- `FILEDIA = 0`
ダイアログを一切出さず、「コマンドライン(文字ベース)でファイルパスを受け付ける」モード。プログラムから操作するときに真価を発揮します。
つまり、VBAのプログラムを実行する瞬間だけ、この `FILEDIA` を `0` に書き換えてやればいいのです!
—
3. 【実践】ダイアログを完全に無視してバックグラウンドで保存するコード
百聞は一見に如かず。実際に、ダイアログを出さずに安全に図面を別名保存する実用コードを見てみましょう。
ご自身のVBAエディタ(Alt + F11)を開き、標準モジュールに以下のコードを貼り付けてみてください。
Sub SaveDrawingWithoutDialog()
Dim targetPath As String
targetPath = “C:\AutoCAD_Work\Sample_Backup.dwg” ‘ 保存先のパス
On Error GoTo ErrorHandler ‘ エラーハンドリング(安全装置)の準備
‘ 1. 現在のFILEDIAの値(通常は1)を記憶しておく
Dim oldFileDia As Integer
oldFileDia = ThisDrawing.GetVariable(“FILEDIA”)
‘ 2. FILEDIAを「0」にして、ダイアログを強制オフにする!
ThisDrawing.SetVariable “FILEDIA”, 0
‘ 3. 別名で保存を実行(ダイアログは出ず、一瞬で裏で処理されます)
‘ ※AC2018DWGはAutoCAD 2018形式で保存するという意味です
ThisDrawing.SaveAs targetPath, ac2018_dwg
‘ 4. FILEDIAの値を元の状態(1)に戻す
ThisDrawing.SetVariable “FILEDIA”, oldFileDia
MsgBox “図面の保存が完了しました!”, vbInformation, “成功”
Exit Sub
ErrorHandler:
‘ 万が一エラーが起きても、必ずFILEDIAを元に戻す(重要!)
ThisDrawing.SetVariable “FILEDIA”, oldFileDia
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical, “エラー”
End Sub
コードのここがポイント!
1. 現在の値を退避させておく (`GetVariable`)
勝手に `0` に変えたあと、処理が終わったら必ず元の状態に戻してあげるのがプロの作法です。これを忘れると、人間が手動で操作するときに「あれ?ダイアログが出ないぞ?」とパニックになってしまいます。
2. 安全装置(`On Error GoTo`)をつける
もし保存先フォルダが存在しなかったりすると、コードは途中でエラーを起こして止まります。その時にもちゃんと `FILEDIA` を元の値に戻せるように、エラー処理(クリーンアップ処理)を組み込んでおくのが、現場で使える強靭なコードの条件です。
—
4. 初学者が陥りがちな「罠」と注意点
罠①:「あれ、動かした後に手動保存したらダイアログが出ない!」
もしマクロが途中で異常終了してしまい、`FILEDIA` が `0` のまま取り残されてしまったときに起こります。
そんな時は、AutoCADのコマンドラインに直接 `FILEDIA` と打ち込み、値を `1` に手動で戻してあげれば元通りになりますのでご安心を。
罠②:パスの指定ミス
`targetPath` で指定するフォルダ(今回の例では `C:\AutoCAD_Work\`)がパソコン内に実際に存在しているか確認してください。存在しないフォルダを指定して `SaveAs` を実行すると、容赦なくエラーになります。
—
まとめ
いかがでしたか?今回は、AutoCAD VBAの初学者が必ず直面する「FILEDIAシステム変数の制御」について解説しました。
- ファイル操作系メソッドはダイアログを出そうとする性質がある
- `ThisDrawing.SetVariable “FILEDIA”, 0` でダイアログをシャットアウトできる
- 処理の最後(およびエラー時)には必ず `1` に戻すこと!
ここをクリアできれば、何百枚もの図面を一括で処理するような本格的なバッチ処理マクロへの扉が開かれます。
基礎の基礎ですが、実務で最も差がつくポイントです。ぜひご自身の環境でも試してみてくださいね。ここをクリアすれば、AutoCAD VBAの基本はバッチリですよ!次のステップへ進みましょう!
