「マクロ記録」のその先へ。THUMBSIZEを操り、図面管理の視認性を劇的に変える技術
こんにちは。AutoCAD VBAの世界へようこそ。
「マクロの記録」機能を使って、決まった操作を自動化することには成功した。でも、もっとスマートに、もっと「道具」として使いこなせるプログラムを書きたい……。もしあなたが今そう感じているなら、あなたはすでに、単なるユーザーから「自動化エンジニア」への入り口に立っています。
今日、私が皆さんに伝授するのは、単なるコードの書き方ではありません。「図面というデータの品質を、プログラムによってコントロールする」という、実務における極めて重要な思考法です。
今回のテーマは、`THUMBSIZE` システム変数を操作し、Windowsエクスプローラー上での図面サムネイル(プレビュー)を劇的に鮮明にする方法です。
なぜ、サムネイルが「ぼやけて」いるのか?
大規模なプロジェクトを扱っていると、フォルダの中に数百、数千のDWGファイルが並ぶことがありますよね。その時、中身を確認するために一つひとつ図面を開いていますか?
もし、Windowsエクスプローラーのプレビューが「ぼやけたアイコン」ばかりだったら、どれが目的の図面か判別するだけで膨大な時間が奪われてしまいます。
実は、AutoCADにはサムネイルの解像度を制御する`THUMBSIZE`というシステム変数が存在します。デフォルトの設定では、ファイルサイズを抑えるために解像度が低く設定されていることが多いのですが、これをVBAから適切に書き換えて保存することで、エクスプローラー上で「パッと見て中身がわかる」高精細な図面管理が可能になります。
これを自動化する。これが、プロフェッショナルへの第一歩です。
核心:システム変数を「掌握」する
多くの初学者は、オブジェクト(`ThisDrawing`など)のプロパティを直接書き換えようとします。しかし、AutoCADの深淵には、オブジェクトではない「システム変数」という、AutoCAD全体の挙動を司る設定値が眠っています。
これを操作するには、以下の2つのメソッドを使いこなす必要があります。
1. `GetVariable(“変数名”)`: 現在の設定値を読み取る。
2. `SetVariable(“変数名”, 値)`: 設定値を書き換える。
ここでのポイントは、「設定を変えてから保存する」というライフサイクルの理解です。
実装コード:高精細サムネイル保存マクロ
それでは、実際に使えるコードを見てみましょう。単に値を書き換えるだけでなく、「元の設定を壊さない」という、エンジニアとして最も大切な「作法」を組み込んでいます。
Option Explicit
''' <summary>
''' 図面を、高精細なサムネイル設定で保存するプロシージャ
''' </summary>
''' <param name="targetPath">保存先のフルパス</param>
Sub SaveWithHighResThumbnail(ByVal targetPath As String)
Dim currentThumbSize As Integer
Dim targetThumbSize As Integer
' --- 設定値の定義 ---
' THUMBSIZEの推奨値(解像度)を指定します。
' 大きすぎるとファイルサイズが増えるため、視認性と容量のバランスを考えます。
targetThumbSize = 256
' エラーハンドリングの開始
On Error GoTo ErrorHandler
' 1. 【重要】現在の設定値をバックアップする
' プログラムの影響を最小限にするため、元の値を覚えておくのが「プロの作法」です。
currentThumbSize = ThisDrawing.GetVariable("THUMBSIZE")
' 2. システム変数を書き換える
' これにより、次に「保存」が行われた際、この解像度でサムネイルが生成されます。
ThisDrawing.SetVariable "THUMBSIZE", targetThumbSize
Debug.Print "サムネイル解像度を " & currentThumbSize & " から " & targetThumbSize & " に変更しました。"
' 3. 図面を保存する
' SaveAsメソッドを使用して、指定したパスに保存します。
ThisDrawing.SaveAs targetPath
MsgBox "高精細サムネイル付きで保存が完了しました!" & vbCrLf & targetPath, vbInformation, "完了"
CleanUp:
' 4. 【極めて重要】設定を元の状態に戻す
' 設定を変えっぱなしにすると、ユーザーが手動で作業する際に意図しない挙動を招きます。
' これを「副作用を抑える」と言います。
On Error Resume Next ' 元に戻す際のエラーは無視して終了させる
ThisDrawing.SetVariable "THUMBSIZE", currentThumbSize
Exit Sub
ErrorHandler:
' エラーが発生した場合の処理
MsgBox "エラーが発生しました。" & vbCrLf & _
"番号: " & Err.Number & vbCrLf & _
"内容: " & Err.Description, vbCritical, "実行エラー"
Resume CleanUp
End Sub
''' <summary>
''' テスト実行用のメインルーチン
''' </summary>
Sub TestSave()
' 保存先のパスを指定してください(例: C:\Temp\HighRes_Sample.dwg)
' ※パスが存在しないとエラーになるので注意!
Call SaveWithHighResThumbnail "C:\Your\Path\Here\HighRes_Drawing.dwg"
End Sub
ここがエンジニアの分かれ道:3つの重要ポイント
コードを書き終えた後、なぜこのように書いたのかを説明できるかどうかが、中級者への境界線です。
1. 「バックアップと復元」の徹底
コード内の`currentThumbSize`によるバックアップを見てください。
もし、プログラムが途中でエラーを起こしたり、設定を変えたまま終了してしまったらどうなるでしょうか? あなたのAutoCADの環境設定が、あなたの知らないうちに書き換わってしまうのです。これは「悪意のないバグ」として、現場では非常に嫌われます。「変えたら、必ず元に戻す」。これを徹底してください。
2. エラーハンドリングの設計
`On Error GoTo ErrorHandler` を入れています。
図面が「読み取り専用」だったり、保存先のフォルダに書き込み権限がなかったりする場合、プログラムは即座にクラッシュします。クラッシュして止まるのではなく、「何が原因で失敗したのか」をユーザーに優しく伝える。これが、実務で使われる「道具」としてのコードです。
3. システム変数の「書き込みタイミング」
`THUMBSIZE`は、図面を「書き出す(Save)」瞬間に参照されます。
したがって、`SaveAs`を呼ぶ前に`SetVariable`を完了させておく必要があります。オブジェクトのライフサイクル(生成→変更→保存→破棄)の流れを意識できていますか?
まとめ:視認性の向上は、業務効率の向上である
今回紹介した`THUMBSIZE`の制御は、一見すると小さなテクニックに見えるかもしれません。しかし、これによって図面管理のストレスが減り、探す時間が短縮されるなら、それは立派な「業務改善」です。
AutoCAD VBAは、単に「作業を自動化する」ためのものではありません。「データの扱い方を最適化し、チーム全体の生産性を引き上げる」ための武器なのです。
次は、この知識を応用して、複数の図面をバッチ処理で一括変換するようなプログラムに挑戦してみませんか?
一歩ずつ、着実に。あなたのエンジニアとしての旅を応援しています。
