【入門編】【実務中級者向け】保存時の「ファイル名禁止文字」を自動置換:OS互換性を考慮したセーフ・セーブ機能 – AutoCAD VBA解析バイブル

スポンサーリンク

AutoCAD VBAの流儀:ファイル保存の「落とし穴」を回避する堅牢なセーフ・セーブ術

こんにちは。現場で日々、AutoCADの自動化と格闘しているエンジニアです。

「図面タイトルをそのままファイル名にしたい」。誰もが一度は考える業務効率化の第一歩ですね。しかし、ここで初心者が必ず直面する壁があります。それは、Windowsのファイル名禁止文字です。

`/ : ? ” < > |`

これらがタイトルに含まれていると、プログラムは無慈悲なエラーを吐いて停止します。今回は、そんな「現場のトラブル」をスマートに回避し、実務で安心して使える「セーフ・セーブ機能」の作り方を伝授します。

—

なぜ「禁止文字」でプログラムが死ぬのか?

Windowsのファイルシステムは、特定の文字をパスの区切りや特殊なコマンドとして予約しています。AutoCAD VBAで `ThisDrawing.SaveAs` を実行する際、引数にこれらの文字が含まれていると、OSが「それはファイル名として受け付けないよ」と拒絶します。

ここで大切なのが、「エラーが起きてから対処する」のではなく、「保存前に浄化する」というエンジニアリングの基本姿勢です。

—

実装コード:堅牢な「セーフ・セーブ」ロジック

以下のコードは、タイトル文字列を解析し、禁止文字を安全な `_`(アンダースコア)に変換してから保存するプロシージャです。

Option Explicit

‘ メイン処理:図面を安全なファイル名で保存する
Public Sub SafeSaveDrawing()
Dim doc As AcadDocument
Dim baseName As String
Dim safeName As String
Dim savePath As String

Set doc = ThisDrawing

‘ ここには図面タイトルを取得するロジックを想定(例:属性から取得など)
baseName = “プロジェクト/A:図面タイトル”

‘ 禁止文字を置換して安全な名前に変換
safeName = SanitizeFileName(baseName)

‘ 保存先パスを定義
savePath = “C:\Drawings\” & safeName & “.dwg”

‘ 保存実行(エラーハンドリングを添えて)
On Error Resume Next
doc.SaveAs savePath, ac2018_DWG ‘ AutoCAD 2018形式で保存

If Err.Number <> 0 Then
MsgBox “保存失敗: ” & Err.Description, vbCritical
Else
MsgBox “保存完了: ” & safeName, vbInformation
End If
On Error GoTo 0
End Sub

‘ 禁止文字を置換する汎用関数
Private Function SanitizeFileName(ByVal inputStr As String) As String
Dim forbiddenChars As Variant
Dim i As Integer
Dim result As String

result = inputStr
‘ 禁止文字のリスト
forbiddenChars = Array(“/”, “:”, “”, “?”, “”””, “<", ">“, “|”)

‘ 一つずつ検索してアンダースコアに置換
For i = LBound(forbiddenChars) To UBound(forbiddenChars)
result = Replace(result, forbiddenChars(i), “_”)
Next i

SanitizeFileName = result
End Function

—

コードの解説:ここがエンジニアのこだわり

1. 関数の分離(重要!):
「禁止文字を置換する処理」を `SanitizeFileName` という独立した関数に切り出しました。こうすることで、他のツールを作る際にも再利用でき、メンテナンス性が劇的に向上します。
2. `On Error Resume Next` の使いどころ:
保存処理は、ネットワークの切断や書き込み権限不足など、プログラムでは制御できない外的要因で失敗することがあります。`On Error` を使うことで、プログラムが強制終了するのを防ぎ、ユーザーに優しい通知を出せるようにしています。
3. バージョン互換の指定:
`SaveAs` メソッドの第2引数でフォーマット(`ac2018_DWG` など)を明示しています。これを省略すると、現在のバージョンで保存されますが、古いAutoCADを使っている業者さんへ渡す場合などには、あえて古いバージョンを指定することでトラブルを未然に防ぐことができます。

—

陥りやすいエラー:知っておくべき「落とし穴」

  • スペースの罠: ファイル名の先頭や末尾にスペースが含まれると、稀にエラーになることがあります。必要に応じて `Trim(safeName)` を活用してください。
  • パスの長さ制限: Windowsにはファイルパス全体で260文字という制限があります。あまりに長いタイトルをファイル名にしようとすると、ここもエラーの温床になります。必要に応じて `Left(safeName, 100)` のように長さを制限する処理を加えると完璧です。

—

まとめ:ここをクリアすれば、あなたはもう脱・初心者

今回紹介した「入力値を信用せず、あらかじめ浄化してから処理する」という考え方は、システム開発において「サニタイジング」と呼ばれる非常に重要な概念です。

このロジックをマスターすれば、ファイル名だけでなく、属性値の書き込みや外部データベースとの連携など、あらゆる業務自動化に応用が効くようになります。

AutoCAD VBAは、あなたの設計業務の「手足」となる強力なツールです。ぜひこのコードをベースに、自分だけの最強のツールへと育て上げてください。応援しています!

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