【入門編】【実務中級者向け】図面を開く前にファイル更新日時とサイズをチェック:FSO連携による効率化 – AutoCAD VBA解析バイブル

スポンサーリンク

こんにちは。AutoCADの自動化という荒野を旅する皆さん。
今日は、多くのエンジニアが「なんとなく」で済ませてしまっている、バッチ処理の足元を固めるための極意をお話しします。

図面を一つずつ開いては保存し、また次を開く……。そんな処理を100枚、1000枚と繰り返すとき、あなたのPCは悲鳴を上げていませんか? 実は、その処理の多くは「そもそも開く必要のないファイル」を無理やり開いているせいで遅くなっているのです。

今回は、VBAの強力な相棒「FileSystemObject (FSO)」を使い、図面を開く前に「このファイルは処理すべきか?」を判定する、賢いエンジニアの定石を伝授します。

—

なぜ「開く前」にチェックするのか?

AutoCADで図面を`Open`メソッドで開くという行為は、実は非常に重い処理です。モデル空間の初期化、外部参照の解決、フォントのロードなど、裏側では膨大なメモリが消費されます。

もし、前回の処理で既に最適化済みの図面をもう一度開いているとしたら?
その時間は完全に無駄です。「更新日時」と「ファイルサイズ」を確認するだけで、その無駄を劇的にカットできます。

—

準備:FileSystemObject (FSO) とは?

FSOは、Windowsのファイルシステムを操作するための「超万能ツール」です。VBA標準の`Dir`関数よりも遥かに直感的で、ファイルのメタデータ(作成日時、更新日時、サイズ等)へのアクセスが容易になります。

まずは、コードを記述する前にVBEの「ツール」→「参照設定」から 「Microsoft Scripting Runtime」 にチェックを入れてください。これが私たちの最強の武器になります。

—

実践:更新日時とサイズで「開くべきか」を判定する

以下は、バッチ処理の冒頭に組み込むべき「選別ロジック」のサンプルコードです。

Sub OpenDrawingWithCondition()
Dim fso As New FileSystemObject
Dim f As File
Dim targetPath As String

‘ 対象ファイルのパス
targetPath = “C:\Projects\Sample.dwg”

‘ ファイルが存在するか確認
If Not fso.FileExists(targetPath) Then Exit Sub

‘ ファイルオブジェクトの取得
Set f = fso.GetFile(targetPath)

‘ 【重要】ここで選別処理を行う
‘ 例:更新日時が1日以内のもの、かつサイズが100KB以上のものだけ処理する
If f.DateLastModified < Now - 1 Or f.Size < 102400 Then Debug.Print "このファイルはスキップします: " & f.Name Exit Sub End If ' ここで初めてAutoCADのOpen処理を実行 ThisDrawing.Application.Documents.Open targetPath Set f = Nothing Set fso = Nothing End Sub

このコードのポイント

1. `f.DateLastModified`: 最終更新日時を取得します。これで「昨日修正した図面だけ再処理する」といった条件分岐が可能です。
2. `f.Size`: ファイルサイズをバイト単位で取得します。極端に小さい(壊れた)ファイルや、空のテンプレートファイルを除外するのに有効です。
3. `Exit Sub`の活用: 処理対象外であれば即座に終了する。この「ガード節」の考え方が、複雑なバッチ処理を安定させる秘訣です。

—

陥りやすい罠:なぜ「Dir関数」ではなく「FSO」なのか?

初心者のうちは `Dir` 関数を使いがちですが、これには大きな落とし穴があります。

  • Dirの限界: `Dir`は一度に一つのファイルしか扱えません。複数のフォルダを再帰的に検索したり、ファイル情報を詳細に取得しようとすると、コードが複雑になりすぎて管理不能になります。
  • FSOの利点: オブジェクト指向であるため、「ファイル」という実体をそのまま変数に格納して扱えます。コードが読みやすく、保守性が圧倒的に高いのです。

—

エンジニアとして、さらなる高みへ

この「事前チェック」をマスターすると、皆さんの自動化ツールは「ただ動くだけ」から「実務で耐えうるプロ仕様」へと進化します。

次のステップとしての提案:
ログファイル(TextStream)を別途作成し、スキップした理由を書き出す仕組みを作ってみてください。「なぜこのファイルは処理されなかったのか?」を記録しておくことは、トラブルシューティングにおいて、あなた自身を助ける強力な記録になります。

AutoCAD VBAは、単なる自動化ツールではありません。あなたの右腕であり、あなたの時間を守る盾です。ぜひ、今日から「無駄なOpen」を排除し、軽快なバッチ処理を実現してください。

ここをクリアしたあなたは、もう初心者ではありません。次の現場で、胸を張って設計を自動化してきてください!

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