【入門編】【実務中級者向け】図面保存時の「ファイル名禁止文字」自動クリーニング機能の実装 – AutoCAD VBA解析バイブル

スポンサーリンク

AutoCAD自動化の深淵へ:保存時の「ファイル名エラー」を根絶する職人技術

こんにちは。AutoCADの自動化設計を担当しているエンジニアです。

「マクロの記録」ボタンを押すだけの世界を卒業し、自分の手でAutoCADを制御したい――そう決意した皆さんを歓迎します。

今回は、実務で誰もが一度は遭遇する「保存時のファイル名エラー」を撃退するテクニックを伝授します。OSの制限や社内ルールの記号が含まれていると、VBAは無慈悲にエラーを吐いて停止します。これをスマートに回避し、「どんなファイル名が来ても絶対にクラッシュさせない」堅牢な保存ロジックを構築しましょう。

—

1. なぜ「そのまま保存」が危険なのか?

Windowsのファイルシステムにおいて、`\ / : ? ” < > |` という記号はファイル名に使用できません。また、社内の運用ルールで「全角スペース禁止」「アンダーバー必須」といった制約がある場合も多いでしょう。

これを人の目でチェックするのは非効率です。「保存ボタンを押した瞬間、プログラムが勝手に安全な名前に直してくれる」。これこそが、エンジニアが自動化を導入する最大の意義です。

—

2. 実装の設計思想:安全なファイル名の生成

まずは、どんな文字でも「安全な文字列」に変換する関数を作ります。これが今回の心臓部です。

‘ 指定された文字列から、Windowsで使用禁止の文字を除去する関数
Public Function SanitizeFileName(ByVal strInput As String) As String
Dim strIllegalChars As String
Dim i As Integer
Dim strResult As String

‘ 禁止されている記号のリスト(必要に応じて追加してください)
strIllegalChars = “\/:?””<>|”
strResult = strInput

‘ 一文字ずつチェックして禁止文字があればアンダーバーに置換
For i = 1 To Len(strIllegalChars)
strResult = Replace(strResult, Mid(strIllegalChars, i, 1), “_”)
Next i

‘ 全角スペースを半角に置換するなどの独自ルールもここで追加可能
strResult = Replace(strResult, “ ”, ” “)

SanitizeFileName = strResult
End Function

【解説:このコードのポイント】

  • 文字列置換の思想: 禁止文字を「削除」してしまうと、ファイル名が意図しない形に崩れることがあります。「何かに置換する(今回は`_`)」ことで、文字数を維持しつつ安全性を確保するのがプロの作法です。
  • 柔軟性: `strIllegalChars` に社内ルールで禁止されている記号を追加すれば、そのまま社内基準に準拠したシステムになります。

—

3. 保存実行プロシージャ:実戦的な実装例

では、実際に保存を行うメインの処理です。`ThisDrawing.SaveAs` メソッドを使う際に、先ほどの関数を噛ませます。

Public Sub SaveDrawingSafely()
Dim doc As AcadDocument
Dim originalName As String
Dim safeName As String
Dim savePath As String

Set doc = ThisDrawing

‘ 保存先のパス(環境に合わせて書き換えてください)
savePath = “C:\AutoCAD_Output\”

‘ 現在の図面名を元にクリーニング
originalName = Left(doc.Name, InStrRev(doc.Name, “.”) – 1) ‘ 拡張子を除く
safeName = SanitizeFileName(originalName) & “.dwg”

‘ エラーハンドリング:万が一の保存失敗に備える
On Error GoTo ErrorHandler

doc.SaveAs savePath & safeName
MsgBox “保存成功: ” & safeName, vbInformation

Exit Sub

ErrorHandler:
MsgBox “保存中にエラーが発生しました: ” & Err.Description, vbCritical
End Sub

—

4. 現場で「生き残る」ための知見

1. `On Error GoTo` の重要性

自動化において、エラーを放置するのは「爆弾を抱えたまま走る」のと同じです。特にファイル操作は、ネットワークの切断や権限不足など、プログラム外の要因で失敗することがあります。必ずエラーハンドリングを書き、「何が起きたか」をユーザーに伝えてください。

2. オブジェクトのライフサイクルを意識する

`ThisDrawing` は便利ですが、大規模な自動化を行う際は、`ActiveDocument` への依存を避け、特定のオブジェクトを明示的に取得する癖をつけましょう。これにより、複数の図面を同時に開いている際のエラーを劇的に減らせます。

—

最後に:ここをクリアすれば「中級者」です

今回紹介した「入力のクリーニング」は、UI開発からサーバー連携まで、あらゆるプログラミングにおいて必須の作法です。これが自然に書けるようになれば、あなたはもう「記録機能に頼る初心者」ではありません。

AutoCAD VBAは、古い言語のように見えて、その裏にあるオブジェクトモデルは非常に洗練されています。次は「図面内の特定の画層を抽出する」といった、図面データそのものに触れるステップへ進んでみましょう。

皆さんのエンジニアリングライフが、より快適で創造的なものになることを願っています。何か不明点があれば、いつでもコメントで聞いてくださいね。一緒に最強の自動化環境を作り上げていきましょう!

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